识别WCF客户端ID

Had*_*ady 7 c# wcf wcf-security

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

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

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

And*_*erd 15

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

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

        <endpoint
            name="basicHttpEndpoint"
            address="http://localhost:8972"
            binding="basicHttpBinding"
            contract="MySeriveContractLib.IMyService"
            >
            <headers>
                <ClientIdentification>ASP_Client</ClientIdentification>
            </headers>
        </endpoint>
Run Code Online (Sandbox Code Playgroud)

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

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<string>(headerIndex);
   if clientString=="ASP_Client"
   {
       // ...
   }
   else
   {
      // ...
   }
}
Run Code Online (Sandbox Code Playgroud)