2012-04-16 69 views
0

我想要一个双工服务,我想知道客户端是否正确输入了她的用户名和密码,因为如果用户以前正确地发送了她的用户名和密码,我只想让它使用服务的方法。WCF:此场景中每次会话的每次呼叫会更好?

对于双工,对于这个post,我知道我可以使用每个呼叫的双工服务,使用静态列表来存储呼叫之间的回调。但我怀疑如何使用per call方法进行用户控制。

我想在这种情况下:

1.-用户调用方法登录(),并发送用户名和密码。在这种情况下是正确的。

2.-用户现在可以调用服务的其余方法。例如method1()。在这里我有一个问题。每次调用它如何在每个方法调用中创建一个新实例,但是,从同一个客户端开始,每个回调都有不同的代码或者是相同的?如果相同,当客户端有不同的回调时,它何时重新启动应用程序?

如果每个呼叫的回叫不同,我怎么知道客户端以前是否发送过她的用户名和密码?我需要发送日志和密码作为方法参数?

如果回调是相同的,是否有可能知道客户端何时关闭连接以从我的静态列表中删除回调?也许这将是连接控制?

谢谢。

编辑:我已经做了一些探测,我发现客户端的回调,每次调用方法都是一样的,所以可以创建一个类来保存所需的信息,比如用户名,如果此用户已在此回调中输入登录名和密码...等。

回答

0

如果您使用PerCall,仍然可以有SessionMode = SessionMode.Required。然后,您可以简单地使用IsInitiating = true修饰您的登录方法操作合同属性,以告知wcf操作开始会话。所有其他操作应设置为IsInitiating = false。如果客户端在调用登录之前调用不启动会话的方法,则会抛出异常。

[ServiceContract(Namespace = "Services", SessionMode = SessionMode.Required, CallbackContract =   typeof(SVIMyCallback))] 

[OperationContract(Name = "login", IsInitiating = true)] 
[OperationContract(Name = "doSomething", IsInitiating = false)]