0

我有一个需要使用来自第三方的 Java Web 服务的 .Net c# 客户端。它们需要客户端证书以及用户名和密码。我设置了证书,但不断得到 401 Unauthorized 因为我认为用户名和密码实际上并未附加到请求中。似乎 WCF 需要一个或另一个,但不是证书和用户名/密码。我肯定错过了一些东西。

<bindings>
<binding name="CC2WebSoap">
  <security mode="Transport">
    <transport clientCredentialType="Certificate" />
  </security>
</binding>
</bindings>
<client>
      <endpoint address="https://url_goes_here.com"
                binding="basicHttpBinding" 
                bindingConfiguration="CC2WebSoap"
                contract="acontract" 
                name="CC2WebSoap" 
                behaviorConfiguration="SecureClientBehavior"/>
</client>
 <behaviors>
      <endpointBehaviors>        
        <behavior name="SecureClientBehavior">
          <clientCredentials>
            <clientCertificate findValue="mythumbprint" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint"/>
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>

     try
            {
        CC2WebSoap client= new CC2WebSoapClient("CC2WebSoap");
                client.ClientCredentials.UserName.UserName = "username";
                client.ClientCredentials.UserName.Password = "password";

                request = BuildRequest();

                response = client.DoSomething(request);
}
catch(Exception e){ // Always get 401 exception here. }
4

1 回答 1

0

通过添加 MessageInspector 和相关类来让 WCF 在每个请求之前将用户名和密码附加到标头,这变得相当简单。具体来说,我完全遵循了下面博客文章中的建议。

使用 MessageInspector 修改 HTTP 标头

于 2013-08-21T14:01:36.280 回答