识别WCF客户端ID

我有一个WCF Web服务,它公开了几种业务方法。 我还有两个客户端 – 一个asp.net GUI和一个数据迁移应用程序,它们都连接到wcf后端以调用各种业务事务。

我需要我的后端能够识别和区分哪个wcf客户端调用了一些变体逻辑。

有没有办法让我的WCF服务能够识别连接到它的客户端? 还有一种方法可以使用签名密钥来防止客户端欺骗他们的身份吗?

您可以通过自定义标头解决此问题。

您可以在客户端应用程序的配置文件中添加自定义标头作为端点的一部分。 然后,您将使每个客户端的自定义标头不同。 例如,在ASP.NET版本中:

  ASP_Client   

然后服务可以像这样检查标头值:

 public void MyServiceMethod() { var opContext = OperationContext.Current; var requestContext = opContext.RequestContext; var headers = requestContext.RequestMessage.Headers; int headerIndex = headers.FindHeader("ClientIdentification", ""); var clientString = headers.GetHeader(headerIndex); if clientString=="ASP_Client" { // ... } else { // ... } } 

为了识别调用者的类型(ASP.NET与WInforms或其他),您可能需要为WCF消息添加自定义标头 – 服务无法知道有关调用客户端的任何信息,除非它是消息的一部分或发送的标题。 为此,您最好的选择是编写WCF消息检查器 – 此博客文章将向您展示如何执行此操作。

至于安全性 – 取决于您的环境。 在防火墙后面的公司LAN中 – 使用Windows凭据。 如果您“面对面”,最好的办法是在客户端安装数字证书以validation其身份。

WCF GuruJuvalLöwy在MSDN杂志上发表了一篇非常好的文章, 声明性WCF安全性 ,它描述了WCF中的五种常见安全方案以及如何实现它们。 强烈推荐阅读。