WCF:如何获取主机IP或服务器名称

时间:2009-04-17 15:13:11

标签: wcf

我有一个通过IIS在多个Web服务器上托管的WCF服务。我有一个记录方法,记录对数据库的调用,我想记录正在执行调用的服务器。

有谁知道如何获取正在执行WCF调用的主机服务器名称或IP地址?

6 个答案:

答案 0 :(得分:13)

使用Dns.GetHostName(),因为获取计算机的名称要比主机IP好得多。考虑主机有多个IP地址,具有虚拟网卡(VMWare)的情况。

答案 1 :(得分:5)

这对我们有用。确保您具有对System.ServiceModel的引用。然后在服务方法中实现以下代码:

var context = System.ServiceModel.OperationContext.Current;

RemoteEndpointMessageProperty property = (RemoteEndpointMessageProperty)context.IncomingMessageProperties[RemoteEndpointMessageProperty.Name];

string externalIP = property.Address;

答案 2 :(得分:1)

Dns.GetHostName()是我最常用的。

答案 3 :(得分:1)

Environment.MachineName 

确实

答案 4 :(得分:0)

DNS主机名不起作用,因为许多服务器具有多个主机名,并且您不知道该服务是在哪个服务器上调用的。 IIRC,IIS可以根据指定的主机名称调用不同的Web服务,从而使问题变得更糟。如果你没有运行单个实例,那么使用.Current是很好的,在这种情况下,你不总是有一个非空的上下文对象,这是我的所有上述情况。如果有人有更坚实的东西,请分享:)

答案 5 :(得分:0)

您可以使用以下代码获取服务器(主机)的当前基地址。

using System.ServiceModel;

var baseAddress = OperationContext.Current.Host.BaseAddresses[0].Authority;