在WCF教程之后,我可以开发一个WCF客户端/服务器应用程序,服务和客户端应用程序都是Windows Forms Application。我可以通过指定UserName和密码来使用每个客户端来调用服务。我的WCF服务应用程序也会显示所有连接的客户端及其用户名。但是,当多个客户端向服务发送请求时,我无法识别哪个用户调用了该方法。这很重要,因为我的应用程序倾向于为每个客户端处理都有自己的会话,就像任何常规ASP.NET应用程序一样。每个用户都有自己的身份和自己的应用程序域。
此外,我希望我的服务将消息发送回客户端,因此我已经实现了回调合同。另外,我正在使用netTcpBinding,因为我的应用程序需要在我的Intranet上运行。
如何在WCF客户端/服务器应用程序中实现此方案?
请帮忙吗?
由于
感谢您之前的回复。它对我很有帮助。 现在,如果我想使用用户名和密码使用自定义身份验证。 让我们假设我有50个客户端使用有效的用户名和密码。如何获得在特定时间点调用服务方法的客户(其中50个)的身份?
由于
答案 0 :(得分:2)
在服务器端代码中,您应该能够从安全上下文中检索调用者的身份 - 例如:
if(ServiceSecurityContext.Current != null &&
ServiceSecurityContext.Current.PrimaryIdentity != null)
{
string userName = ServiceSecurityContext.Current.PrimaryIdentity.Name;
}
如果您使用Windows身份验证调用服务(这可能对您有用 - 如果您在公司LAN上,就像看起来那样) - 您应该能够访问安全上下文.WindowsIdentity
相反(对于任何其他认证机制,这将是null
。)