如何使用连接服务将自定义标头添加到传出SOAP负载中?

时间:2019-05-01 07:19:37

标签: c# asp.net wcf

我需要向使用HTTPS端点发送到我项目中的一个Connected Services的每个有效负载添加一个自定义标头。该自定义标头将用作对接收者的身份验证。我该怎么办?

我尝试使用System.ServiceModel.Channels.MessageHeaderAddressHeader时不走运。使用SoapUI,向请求中添加自定义标头即可正常工作。

此身份验证方法对于接收者来说是新的。同样是HTTPS端点。在以前的请求中,我使用的是Basic Http Authentication和用户名和密码。因此,为了支持HTTPS绑定代码,我对此进行了一些更改:

BasicHttpsBinding basicAuthBinding = new BasicHttpsBinding(BasicHttpsSecurityMode.Transport);
basicAuthBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;

EndpointAddress basicAuthEndpoint = new EndpointAddress("https://whatever");
MyConnectedService.MyOperationClient client = new MyConnectedService.MyOperationClient(basicAuthBinding, basicAuthEndpoint);

client.ClientCredentials.UserName.UserName = "user";         
client.ClientCredentials.UserName.Password = "pass";

client.send(payload);

我相信我需要在此处添加自定义标头。

使用此代码,我得到了预期的HTTP 401 - Unauthorized

帮助表示赞赏。

谢谢。

1 个答案:

答案 0 :(得分:0)

如果您接受静态自定义标头,则可以尝试使用web.config(app.config)。

 <endpoint address="http://ws-wuxipc-5077:4000/calculator" binding="basicHttpBinding"
  contract="ServiceInterface.CustomHeader" name="header">
  <headers>
    <Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" >
      <wsse:UsernameToken xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
        xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        <wsse:Username>
        </wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">monMonDePasse</wsse:Password>
        <wsse:Nonce>sdsdsdlojhfdsdM5Nw==</wsse:Nonce>
        <wsu:Created>2019-01-21T6:17:34Z</wsu:Created>
      </wsse:UsernameToken>
    </Security>
  </headers>
</endpoint>