提供的 URI 方案 'https' 无效;预计 'http'。参数名称:via 用于 HTTPS
The provided URI scheme 'https' is invalid; expected 'http'. Parameter name: via for HTTPS
场景如下。
我们有 F5 负载平衡器,传入请求以 HTTP 形式进入 F5 负载平衡器,然后以 HTTP 形式重定向到 WCF 服务服务器。
我已经尝试了几乎所有可能的配置组合,但它总是给出两个不同的错误。例如,根据一些建议,我尝试将安全模式更改为 'Transport' 然后错误更改为: "Could not establish secure channel for SSL/TLS with authority 'xxx.xxx.xxx.xxx:XXXX'."
服务器配置:
<system.serviceModel>
<services>
<service behaviorConfiguration="NameofServiceBehaviour" name="NameOfServices">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="wsHttpEndPointBinding" name="wsHttpEndPoint" contract="Name.IContractName" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="wsHttpEndPointBinding">
<security mode="None">
<!-- <transport clientCredentialType="Certificate" /> -->
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviourName">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<!-- <serviceCredentials>
<serviceCertificate findValue="CN=CertificateName" storeLocation="LocalMachine" />
</serviceCredentials> -->
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false" />
</system.serviceModel>
客户端配置:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="wsHttpEndPoint">
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="https://URL.svc"
binding="wsHttpBinding" bindingConfiguration="wsHttpEndPoint"
contract="Name.IContractName" name="wsHttpEndPoint" />
</client>
</system.serviceModel>
此致,
纳西尔
我找到了 this link 的答案。关键是在自定义绑定中设置以下参数:
<security allowInsecureTransport="true" enableUnsecuredResponse="true">
在负载均衡器下,我遇到了这个问题,修复是在客户端,如下所示:
<system.serviceModel>
<bindings>
<customBinding>
<binding name="MyBindingConfig">
<textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16" messageVersion="Soap11" writeEncoding="utf-8">
</textMessageEncoding>
<httpsTransport authenticationScheme="Anonymous" bypassProxyOnLocal="false" proxyAuthenticationScheme="Anonymous"/>
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="https://YOUR-END-POINTURL-WITH-HTTPS"
binding="customBinding" bindingConfiguration="MyBindingConfig"
contract="ServiceReference.YOURCONTRACT" name="TEST" />
</client>
</system.serviceModel>
您还可以看到,当您在 VisualStudio 上添加 Web 服务引用并将 URL 与 HTTPS 放在一起时,它会自动在客户端子节点上添加 URL(客户端 app.config) 没有 S 所以(HTTP 因为是负载均衡器)那么你可以继续使用 HTTPS 更新它,就像我在上面的例子中所做的那样。
希望对你有帮助。
场景如下。
我们有 F5 负载平衡器,传入请求以 HTTP 形式进入 F5 负载平衡器,然后以 HTTP 形式重定向到 WCF 服务服务器。
我已经尝试了几乎所有可能的配置组合,但它总是给出两个不同的错误。例如,根据一些建议,我尝试将安全模式更改为 'Transport' 然后错误更改为: "Could not establish secure channel for SSL/TLS with authority 'xxx.xxx.xxx.xxx:XXXX'."
服务器配置:
<system.serviceModel>
<services>
<service behaviorConfiguration="NameofServiceBehaviour" name="NameOfServices">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="wsHttpEndPointBinding" name="wsHttpEndPoint" contract="Name.IContractName" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="wsHttpEndPointBinding">
<security mode="None">
<!-- <transport clientCredentialType="Certificate" /> -->
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviourName">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<!-- <serviceCredentials>
<serviceCertificate findValue="CN=CertificateName" storeLocation="LocalMachine" />
</serviceCredentials> -->
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false" />
</system.serviceModel>
客户端配置:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="wsHttpEndPoint">
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="https://URL.svc"
binding="wsHttpBinding" bindingConfiguration="wsHttpEndPoint"
contract="Name.IContractName" name="wsHttpEndPoint" />
</client>
</system.serviceModel>
此致, 纳西尔
我找到了 this link 的答案。关键是在自定义绑定中设置以下参数:
<security allowInsecureTransport="true" enableUnsecuredResponse="true">
在负载均衡器下,我遇到了这个问题,修复是在客户端,如下所示:
<system.serviceModel>
<bindings>
<customBinding>
<binding name="MyBindingConfig">
<textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16" messageVersion="Soap11" writeEncoding="utf-8">
</textMessageEncoding>
<httpsTransport authenticationScheme="Anonymous" bypassProxyOnLocal="false" proxyAuthenticationScheme="Anonymous"/>
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="https://YOUR-END-POINTURL-WITH-HTTPS"
binding="customBinding" bindingConfiguration="MyBindingConfig"
contract="ServiceReference.YOURCONTRACT" name="TEST" />
</client>
</system.serviceModel>
您还可以看到,当您在 VisualStudio 上添加 Web 服务引用并将 URL 与 HTTPS 放在一起时,它会自动在客户端子节点上添加 URL(客户端 app.config) 没有 S 所以(HTTP 因为是负载均衡器)那么你可以继续使用 HTTPS 更新它,就像我在上面的例子中所做的那样。 希望对你有帮助。