2009-04-17 12 views
14

Birden çok web sunucusu üzerinde IIS üzerinden barındırılan bir WCF hizmetim var. Çağrıları veritabanına kaydeden bir günlük yöntemim var ve aramanın hangi sunucuda çalıştırıldığını görmek istiyorum.WCF: Anasistem IP veya Sunucu Adı Nasıl Alınır

WCF çağrısının üzerinde çalıştığı ana makine sunucusu adını veya IP adresini nasıl alacağını bilen var mı?

cevap

12

Dns.GetHostName() işlevini kullanın, çünkü bilgisayarın adını ana bilgisayar IP'sinden almak daha iyidir. Ana bilgisayarınız birden fazla IP adresine sahip olduğunda, sanal ağ kartlarına (VMWare) sahip olduğunda durumu ele alın.

1

Dns.GetHostName() en çok kullandığım şeydir.

5

Bu bizim için çalıştı. System.ServiceModel'e başvurduğunuzdan emin olun. Sonra servis yönteminde aşağıdaki kodu uygulamak:

var context = System.ServiceModel.OperationContext.Current; 

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

string externalIP = property.Address; 
+4

İstemci IP adresi, ana makine değil. – berdem

1
Environment.MachineName 

birçok sunucu birden çok ana bilgisayar adları vardır çünkü

0

DNS ana bilgisayar adı çalışmadığını axactly yapar ve Bilmiyorsanız hangisinin hizmet çağrıldı. IIRC, IIS, hangi ana makine adının konunun daha kötüye kullanıldığı belirtilerek, farklı web servislerini arayabilir. .Current kullanmak, tek bir örneği çalıştırmıyorsanız harikadır; bu durumda, her zaman yukarıdakiler için benim durumum olan boş olmayan bir bağlam nesnesine sahip olmazsınız. Herhangi biri daha katı bir şey varsa, lütfen paylaşın :)

0

Geçerli ana adresi (ana bilgisayar) almak için aşağıdaki kodu kullanabilirsiniz.

using System.ServiceModel; 

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