【问题标题】:WCF Service (wsHttpBinding binding) behind F5 load balancerF5 负载均衡器后面的 WCF 服务(wsHttpBinding 绑定)
【发布时间】:2011-05-07 06:46:52
【问题描述】:

当前设置: - 我有一个带有 wsHttpBding 的 WCF 服务,请参阅下面的服务配置 - 我已经实现了一个 ServiceHostFactory 来解决不正确的模式位置和肥皂地址的问题,将它们从机器名修改为正确的服务器主机名 - 我的测试客户端(WCFStorm)我可以生成一个代理,查看所有方法并成功调用它们。 - 我的开发环境(客户端-> HTTPS -> 服务)运行良好。

问题: - 产品环境(客户端 -> HTTPS -> F5 -> HTTP -> 服务) - 我的服务位于卸载 SSL 的 F5 负载均衡器后面 - 我的测试客户端(WCFStorm)我可以生成一个代理并查看所有方法,但是当我调用任何方法时,我得到一个远程服务器未找到 404 错误

  • 我的服务配置: <services> <service behaviorConfiguration="Service1Behavior" name="MyService"> <endpoint name="secure" address="" binding="wsHttpBinding" bindingConfiguration="custBinding" contract="IService"/> <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> </service> </services> <bindings> <wsHttpBinding> <binding name="custBinding"> <security mode="Transport"> <transport clientCredentialType="None" /> <message clientCredentialType="None" negotiateServiceCredential="false" establishSecurityContext="false" /> </security> </binding> </wsHttpBinding> </bindings> <behaviors> <serviceBehaviors> <behavior name="Service1Behavior"> <serviceMetadata httpsGetEnabled="true" httpGetEnabled="true" httpGetUrl="http://myserver/MyService.svc"/> <serviceDebug includeExceptionDetailInFaults="true"/> <dataContractSerializer maxItemsInObjectGraph="6553600" /> </behavior> </serviceBehaviors> </behaviors>

  • 请注意,我在 wsdl 上的所有模式位置和肥皂地址在 prod 中都是正确的,但我根本无法调用任何方法。

请帮忙。

【问题讨论】:

标签: wcf https f5


【解决方案1】:

我们也有类似的情况,下面是我们的工作方式。

在服务中 - 我们将绑定更改为使用 basicHttpBinding 并添加了一个必须随每个请求传递的键。

在客户端 - 我们将配置中的 http 更改为 https,在 basicHttpBindings 配置中将安全模式更改为 TransportclientCredentialType="None"

希望这会有所帮助。

更新:我很快就找到了这篇文章,我更新了配置并且它工作了。所以现在我们使用 wsHttpBinding 而不是 basicHttpBinding。 http://blogs.msdn.com/b/morgan/archive/2010/04/15/setting-up-wcf-with-a-load-balancer-using-ssl-in-the-middle.aspx

【讨论】:

    【解决方案2】:

    您的服务配置的问题在于安全模式是Transport,而实际上它应该是None。因为对您的服务的任何调用都将是 F5 负载均衡器后面的 HTTP,所以您不能在那里使用Transport 安全模式(客户端 -> HTTPS -> F5 -> HTTP -> 服务)。但是,当从您的客户端调用服务时,客户端配置需要为Transport 安全模式,并且端点地址需要具有HTTPS 地址。

      <wsHttpBinding>
        <binding name="custBinding">
          <security mode="None">
            <transport clientCredentialType="None" />
            <message clientCredentialType="None" negotiateServiceCredential="false" establishSecurityContext="false" />
          </security>
        </binding>
      </wsHttpBinding>
    

    【讨论】:

    • 对于这个答案,需要 SSL 的“端点”是否意味着 F5?还是超越 F5 一直到真正分配的服务器?
    【解决方案3】:

    这对您来说可能有点晚了,但我们是这样做的。生成代理后,我只需将配置中的 http: 更改为 https。现在,如果我必须有时用 ssl 调用它,有时不用,我将复制 config 部分,并给副本一个不同的名称,然后在构建客户端时,您可以传入配置名称,它会选择正确的。

    【讨论】:

      【解决方案4】:

      我们无法通过第 7 层负载平衡来解决此问题 - 服务返回了各种错误消息。相反,它设置在第 4 层负载平衡上,没有任何问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-06
        • 2019-11-14
        • 1970-01-01
        • 2011-04-19
        • 2019-04-29
        相关资源
        最近更新 更多