这里是我试图处理情况:如何WCF服务重定向到HTTPS端点与Windows凭据
我们有一个WCF客户端与HTTP端点工作和HTTPS端点而不是在它从http重定向(302)到https。我们有一个正在执行重定向和SSL功能的F5负载均衡器,但据我所知,它并没有对请求产生任何意想不到的结果。重定向似乎是WCF在重定向执行后不想提供Windows Kerberos身份验证信息的罪魁祸首。
一个成功的调用(即HTTP无重定向)的顺序是这样的:
- 客户端 - 发送POST请求的服务以http方式
- 服务器 - 与401未经授权
- 客户端响应 - 发送具有授权的协商POST
- 服务器 - 以100继续响应
- 客户端 - 发送肥皂数据并成功完成
当呼叫重定向和失败,它是这样的:
- 客户端 - 发送POST请求的服务以http方式
- 服务器 - 具有重定向返回302到https方案为同一地址
- 客户端 - 发送GET为HTTPS地址(我想不通为什么这是一个GET而不是POST)
- 服务器 - 与401未经授权 回应0
- 客户端 - 抛出异常“HTTP请求未经客户端身份验证方案”协商“授权。从服务器接收认证报头是“协商,NTLM”。”
它类似于this problem但不完全相同(并没有一个真正的答案了,虽然它引用‘破WCF协议’如果我们关闭F5重定向规则http和https通信工作正常WCF是否真的不处理这个简单的重定向?是否有解决方法或任何文档在这个缺陷?
客户端配置请注意,当使用https测试时,我将TransportCredentialOnly更改为传输):
<client>
<endpoint address="http://fooserver/MyService.svc/" binding="basicHttpBinding" bindingConfiguration="clientBinding" contract="Contracts.IMyService" />
</client>
<bindings>
<basicHttpBinding>
<binding name="clientBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" proxyCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
服务器的配置是这样的:
<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<services>
<service behaviorConfiguration="MyServiceBehavior" name="MyService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="securedBinding" contract="Contracts.IMyService">
</endpoint>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="securedBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" proxyCredentialType="Windows"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<useRequestHeadersForMetadataAddress>
<defaultPorts>
<add scheme="http" port="80" />
<add scheme="https" port="443" />
</defaultPorts>
</useRequestHeadersForMetadataAddress>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
的可能的复制[为什么会失败WCF调用遇到302响应时,SOAP服务?(http://stackoverflow.com/questions/17152385/why-would-wcf-fail-to-call-a -so--302-response-is-encounter) – Luizgrs 2015-10-08 20:12:04