我有一个由代码启动的WCF服务(通过创建BasicHttpBinding,ServiceHost等)。但是,此服务发布的WSDL的主机名是硬编码的。即我告诉服务它在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,但这样做很麻烦且容易出错,例如更改服务器设置或升级。