0

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

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

在这种情况下,我在想:

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

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

如果每次调用的回调都不一样,我怎么知道客户端之前是否发送了她的用户名和密码?我需要将日志和密码作为方法参数发送吗?

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

谢谢。

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

4

1 回答 1

0

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

IE

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

 [OperationContract(Name = "login", IsInitiating = true)]
 [OperationContract(Name = "doSomething", IsInitiating = false)]
于 2012-04-17T07:11:40.653 回答