2009-04-17 108 views
14

我有一个WCF服务,通过多个Web服务器上的IIS托管。我有一个日志记录方法,将调用记录到数据库,我想记录哪个服务器正在执行调用。WCF:如何获取主机IP或服务器名称

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

回答

12

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

1

Dns.GetHostName()是我使用最多的。

5

这是我们的工作。确保你有一个对System.ServiceModel的引用。然后执行以下代码在您的服务方法:

var context = System.ServiceModel.OperationContext.Current; 

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

string externalIP = property.Address; 
+4

它是客户端IP地址,而不是主机。 – berdem 2012-02-22 13:50:40

1
Environment.MachineName 

确实axactly是

0

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

0

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

using System.ServiceModel; 

var baseAddress = OperationContext.Current.Host.BaseAddresses[0].Authority; 
相关问题