【发布时间】:2015-06-11 18:23:56
【问题描述】:
我正在调用使用 Windows 身份验证的 SOAP 服务。这是我的配置:
new BasicHttpBinding
{
Security = new BasicHttpSecurity
{
Mode = BasicHttpSecurityMode.TransportCredentialOnly,
Transport = new HttpTransportSecurity
{
ClientCredentialType = HttpClientCredentialType.Windows
}
},
};
我在这里手动设置凭据,因为用户位于不同的域中:
client.ClientCredentials.Windows.ClientCredential.Domain = "...";
client.ClientCredentials.Windows.ClientCredential.UserName = "...";
client.ClientCredentials.Windows.ClientCredential.Password = "...";
我注意到我通过客户端代理进行的每次调用都会导致三个行程:
Request: POST /EndPoint (no auth)
Response: 401 Unauthorized, WWW-Authenticate: Negotiate
Request: POST /EndPoint, Authorization: Negotiate
Response: 401 Unauthorized, WWW-Authenticate: Negotiate <gunk>
Request: Post /EndPoint, Authorization: Negotiate <gunk>
Response: 200 OK
如果这只发生在第一次调用时,它不会那么糟糕,但它会发生在对同一客户端代理实例的所有后续调用中。
我要呼叫的服务器不在我的控制范围内,并且延迟时间不小,所以我很想找到一种方法来消除这些多余的行程。有可能吗?
【问题讨论】:
-
我认为它尝试了不同版本的加密 tls1.0、1.1 等,您可以按特定顺序设置它们。这也可能是服务器端问题,它首先期望最高形式等,但这只是一个非常模糊的猜测
-
@CoryNelson WCF 服务由 IIS 托管?
标签: c# .net wcf soap windows-authentication