我有一个WCF服务,通过多个Web服务器上的IIS托管。我有一个日志记录方法,将调用记录到数据库,我想记录哪个服务器正在执行调用。WCF:如何获取主机IP或服务器名称
有谁知道如何获取WCF调用正在执行的主机服务器名称或IP地址?
我有一个WCF服务,通过多个Web服务器上的IIS托管。我有一个日志记录方法,将调用记录到数据库,我想记录哪个服务器正在执行调用。WCF:如何获取主机IP或服务器名称
有谁知道如何获取WCF调用正在执行的主机服务器名称或IP地址?
使用Dns.GetHostName(),因为获取计算机的名称比主机IP好得多。考虑一下当你的主机有多个IP地址,有虚拟网卡(VMWare)的情况。
Dns.GetHostName()是我使用最多的。
这是我们的工作。确保你有一个对System.ServiceModel的引用。然后执行以下代码在您的服务方法:
var context = System.ServiceModel.OperationContext.Current;
RemoteEndpointMessageProperty property = (RemoteEndpointMessageProperty)context.IncomingMessageProperties[RemoteEndpointMessageProperty.Name];
string externalIP = property.Address;
Environment.MachineName
确实axactly是
DNS主机名不起作用,因为许多服务器有多个主机名,你不知道哪一个服务被调用。 IIRC,IIS可以根据指定的主机名称调用不同的Web服务,从而使事情变得更糟。使用.Current很好,如果你没有运行一个单一的实例,在这种情况下,你不总是有一个非空的上下文对象,这是我所有的上述情况。如果有人有什么更坚实的,请分享:)
您可以使用下面的代码来获取服务器(主机)的当前基地址。
using System.ServiceModel;
var baseAddress = OperationContext.Current.Host.BaseAddresses[0].Authority;
它是客户端IP地址,而不是主机。 – berdem 2012-02-22 13:50:40