我有一个通过IIS在多个Web服务器上托管的WCF服务。我有一个记录方法,记录对数据库的调用,我想记录正在执行调用的服务器。
有谁知道如何获取正在执行WCF调用的主机服务器名称或IP地址?
答案 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;