我有一个通过IIS托管在多个Web服务器的WCF服务。我有一个记录到数据库的调用一个测井方法,我想记录的调用执行上的服务器。
有谁知道如何获取WCF调用正在执行的主机服务器名或IP地址?
使用Dns.GetHostName(),因为它是更好的获得比电脑主机IP的名称。考虑当你的主机有多个IP地址,拥有虚拟网卡(VMWare的)。
这对我们来说是什么工作。请确保您有System.ServiceModel的引用。然后实现在您的服务方法下面的代码:
var context = System.ServiceModel.OperationContext.Current;
RemoteEndpointMessageProperty property = (RemoteEndpointMessageProperty)context.IncomingMessageProperties[RemoteEndpointMessageProperty.Name];
string externalIP = property.Address;
Dns.GetHostName()是我用得最多。
Environment.MachineName
正是如此
DNS主机名不起作用,因为许多服务器有多个主机名,你不知道该服务被称为哪一个。 IIRC,IIS可以调用基于该主机名被指定使事情更糟的是对不同的网络服务。使用.Current是巨大的,如果你没有运行一个实例,在这种情况下,你不要总是有一个非空的上下文对象,这是我的情况下,上述所有的。如果任何人有任何更坚实的,请分享:)
您可以使用下面的代码来获得服务器(主机)的当前基地址。
using System.ServiceModel;
var baseAddress = OperationContext.Current.Host.BaseAddresses[0].Authority;