2013-03-20 89 views
1

我这样当前登录用户名和密码:注销从服务

var client = new ServiceReference.CalcServiceClient(); 
client.ClientCredentials.UserName.UserName = "test"; 
client.ClientCredentials.UserName.Password = "test"; 
client.DoWork(); 

这工作得很好。现在,我想添加一种注销方式(用户按下按钮,注销请求应该以某种方式发送)。

这是可能的,如果是这样,那么实现这个的最好方法是什么?

+0

请提供更多详细信息 - CalcServiceClient是代理服务器吗?那么关闭它可能会足够好吗? – evgenyl 2013-03-20 08:04:59

+1

由于WCF是无状态的(或至少应该是)没有会话的概念。凭证保存在代理实例中,每个请求分别进行验证。如果这种特定服务有不同的行为,告诉我们它是什么,也许我们可以提供帮助。 – 2013-03-20 08:12:17

回答

5

如果WCF配置了PerSession,client.Close();将完成这项工作。

的过程将是:

  • 客户端创建WCF服务的代理,使方法 调用。
  • 创建一个WCF服务实例,它为方法响应提供服务。
  • 客户端在同一个会话中调用另一个方法。
  • 相同的WCF服务实例提供方法调用。
  • 当客户端完成其活动时,WCF实例被销毁 并送往垃圾收集器进行清理。

随着关闭你会触发垃圾收集器清理。

如果WCF配置了PerCall,则不需要担心Close/Logof。我会建议总是执行一个明确的关闭(和使用),但在这种情况下并不是必须的。

如果WCF配置了SingleInstance ...那么也许你做错了:)无论如何,你应该继续使用Close()。