我必须使用传输和Windows帐户身份验证模式请求SOAP服务。 无论我使用何种方法,我总是会得到相同的错误:"无法找到授权标题"。 我使用的是Visual Studio Professional 2015和.NET Framework 4.6.1。
为了创建客户端和发送请求,我使用:
var client = new MyServiceClient();
client.ClientCredentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;
client.MyRequest();
我试过了:
在app.config中使用带有默认参数的自动生成的服务引用。
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IMyService">
<security mode="Transport" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://xxxxxxxx:xxxxx/" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMyService" contract="Service.IMyService" name="BasicHttpBinding_IMyService" />
</client>
</system.serviceModel>
通过
修改<security mode="Transport" />
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
删除app.config中的system.serviceModel部分并按代码使用配置
var binding = new BasicHttpBinding
{
Security =
{
Mode = BasicHttpSecurityMode.Transport,
Transport = {ClientCredentialType = HttpClientCredentialType.Windows}
}
};
var endpoint = new EndpointAddress(new Uri("https://xxxxxxxx:xxxxx/"));
this.client = new FrontServiceCvaClient(binding, endpoint);
仅用于测试目的,我还手动设置登录/密码
this.client.ClientCredentials.Windows.ClientCredential = new NetworkCredential(username, password);
最后一件事:我得到了跟踪日志,实际上,我没有在标题中看到任何身份验证提及
System.Net Information: 0 : [22264] ConnectStream#56930466 - Sending headers
{
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://xxxxxxxxxx/IMyService/MyRequest"
Host: xxxxxxxx:xxxxx
Content-Length: 94938294
Expect: 100-continue
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
}.
对于所有这些情况,我总是有同样的错误。 我无法理解为什么凭证似乎没有添加到已发送的请求中。 提前感谢任何帮助或建议,以了解这种行为。