WCF:在这种情况下,每个呼叫或每个会话更好?

时间:2012-04-16 11:14:37

标签: wcf instance

我想要一个双工服务,我想知道客户端是否输入了正确的用户名和密码,因为我只想让用户先前发送她的用户名和密码来使用该服务的方法正确。

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

我在考虑这种情况:

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

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

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

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

感谢。

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

1 个答案:

答案 0 :(得分:0)

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

I.e

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

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