在WCF元数据发布中自动解析主机名

时间:2010-12-30 15:51:24

标签: wcf url metadata

我正在运行自托管的WCF服务。在服务配置中,我在我的BaseAddresses中使用 localhost ,我将端点挂钩到。尝试使用WCF测试客户端连接到端点时,我没有问题连接到端点并使用计算机的名称获取元数据。我遇到的问题是,从元数据生成的客户端在其要连接的端点URL中使用localhost。我假设这是因为 localhost 是元数据发布的端点URL。因此,对服务上的方法的任何调用都将失败,因为调用计算机上的 localhost 未运行该服务。

我想弄清楚的是,服务元数据是否可以根据正在调用它的客户端向客户端发布正确的URL。例如,如果我从与服务器位于同一网络的计算机上请求服务元数据,则端点应为 net.tcp:// MYSERVER:1234 / MyEndpoint 。如果我是从网络外的计算机请求它,则URL应为 net.tcp://MYSERVER.mydomain.com:1234 / MyEndpoint 。显然,如果客户端在同一台机器上,那么URL可能是 net.tcp:// localhost:1234 / MyEndpoint

这只是默认IMetadataExchange合同中的一个缺陷吗?元数据是否需要以非上下文方式发布信息?有没有其他方法我应该配置我的BaseAddresses以获得我想要的功能?

谢谢,

麦克

1 个答案:

答案 0 :(得分:2)

您使用的是什么.NET版本?如果您使用的是.NET 4.0,请将UseRequestHeadersForMetadataAddressBehavior添加到您的服务主机:

UseRequestHeadersForMetadataAddressBehavior urh = 
    new UseRequestHeadersForMetadataAddressBehavior();
serviceHost.Description.Behaviors.Add(urh);

显然,这需要在打开服务主机之前完成。

如果您使用的是.NET 3.5,则会出现一个添加此行为的修补程序:support.microsoft.com/kb/971842。

相关问题