gpt4 book ai didi

WCF、元数据和 BIGIP - 我可以为 WSDL 项目强制使用正确的 url 吗?

转载 作者:行者123 更新时间:2023-12-04 04:14:22 25 4
gpt4 key购买 nike

我们有一个托管在 ServerA 上的 WCF 服务,它是一个不能直接访问 Internet 的服务器,并且有一个不可 Internet 路由的 IP 地址。

该服务的前端是 BIGIP,它处理 SSL 加密和解密,并将未加密的请求转发到特定端口上的 ServerA(目前它实际上不做任何负载平衡,但将来可能会添加)。

这意味着我们的客户将通过 https://www.OurDomain.com/ServiceUrl 调用该服务。并会在 http://SeverA:85/ServiceUrl 上获得我们的服务通过 BIGIP 设备;

当我们浏览到 https://www.OurDomain.com/ServiceUrl 上发布的 WSDL 时WSDL 中包含的所有地址均基于 http://SeverA:85/ServiceUrl基址

我们发现我们可以使用主机头设置来设置域,但我们的问题是虽然这会整理域,但我们仍然会使用错误的方案——它会使用 http://www.OurDomain.com/ServiceUrl而我们需要它是 Https。

此外,由于我们在该服务器上托管了其他服务(基于 asmx),因此我们在设置主机 header 时遇到了一些问题,因此我们认为我们可以在服务器上创建另一个站点(例如,使用端口 82)并设置主机头;现在,除了 http/https 问题之外,我们还有一个问题,因为 WSDL 包含所有 url 中的端口号,BigIP 在端口 443 上工作(用于 SSL)

有没有比实现 Host Headers 更灵活的解决方案?理想情况下,我们需要保持灵 active 和易于支持。

谢谢你的帮助…

最佳答案

这本质上是一个多部分的问题,涉及许多离散的解决方案来提供完整的答案。坐在 F5 后面基本上有 3 个问题。

  • 公布的服务端点主机名。
  • 指向 xsd:import'ed 模式的链接的主机名,用于描述数据协定
  • 您描述的 http/https 问题。

  • 正如您所发现的那样,更改主机 header 可以解决 1 和 2(您可以通过主机 header 以外的方式解决此问题,但无需在此处讨论)。数字 3 有点棘手,需要更多代码(这里太多了)。

    简短的回答是您需要编写一个实现 IContractBehavior 和 IWsdlExportExtension 的 ContractBehavior。

    您需要实现的重要一点是 IWsdlExportExtension.ExportEndpoint。在此方法中,您需要遍历所有 WsdlPort 扩展,并且当您找到类型为 SoapAddressBinding 的扩展时,您需要将 SoapAddressBinding.Location 属性替换为包含 https 协议(protocol)说明符的新 Uri。您还需要对 xsd 导入地址和模式链接执行类似的操作。

    如果您的服务也在使用 WS-Addressing,那么您需要执行类似的操作来处理它写入 wsdl 的附加地址。

    我最终编写的代码基于 CodePlex ( http://wcfextras.codeplex.com/) 上提供的 WsdlExtras 项目。 WsdlExtras 中使用的方法为您可能需要添加到它的任何额外位提供了一个很好的基础(从内存中我认为它不处理 WS-Addressing 位)。您要查看的是“覆盖 SOAP 地址位置 URL”。

    关于WCF、元数据和 BIGIP - 我可以为 WSDL 项目强制使用正确的 url 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/634522/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com