【问题标题】:how to have a WCF service refer to the hostname by which it is called如何让 WCF 服务引用调用它的主机名
【发布时间】:2011-03-14 21:17:37
【问题描述】:

我有一个由代码启动的 WCF 服务(通过创建 BasicHttpBinding、ServiceHost 等)。但是,此服务发布的 WSDL 的主机名是硬编码的。 IE。我告诉服务它在 example.com 上运行,并且 WSDL 将导入诸如

<xsd:import schemaLocation="http://example.com:8018/MyService" etc etc>

现在,从 example.com 本身,我可能希望通过 http://localhost:8018/MyService 而不是 example.com 来引用此服务。但是,xsd 导入仍然会引用预配置的地址。

难道没有办法让服务使用在 WSDL 内部调用 WSDL 页面的主机吗?还是只使用相对地址? (假设客户支持;我不确定)

这很重要的原因是,服务是由同一服务器公园中的服务器通过其内部 IP 地址来寻址的,而外部服务是通过其外部主机名来寻址的。我们希望避免所有流量再次进出子网,因为我们无法让 WCF 了解它可能具有不同的主机名。我们当前的解决方案是修改内部客户端中的hosts 文件以使外部主机名指向内部IP,但这在例如更改服务器设置或升级。

【问题讨论】:

    标签: c# .net wcf


    【解决方案1】:

    这应该通过使用useRequestHeadersForMetadataAddress服务行为来解决。

    【讨论】:

    • 谢谢!听起来它应该是我正在寻找的解决方案。但是,我似乎无法用代码添加它(我没有使用 web.xml)。关于从哪里开始寻找的任何提示?
    • 您可以使用 UseRequestHeadersForMetadataAddressBehavior 将其直接添加到 ServiceHost,但请注意,此行为仅存在于 .NET 4 中。旧版本将其作为单独的 KB(补丁)。
    • 非常感谢。另外,使用您提到的关键字,我发现我的问题与stackoverflow.com/questions/4564029/… 重复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多