2009-04-17 2 views
14

IIS를 통해 여러 웹 서버에서 호스팅되는 WCF 서비스가 있습니다. 데이터베이스에 호출을 기록하는 로깅 메서드가 있고 호출이 실행되는 서버를 기록하고 싶습니다.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

1
Environment.MachineName 

많은 서버가 여러 호스트 이름을 가지고 있기 때문에

0

DNS 호스트 이름이 작동하지 않습니다 axactly 수행하고 당신이 모르는 어느 하나 서비스가 요청되었습니다. IIRC에서 IIS는 어떤 호스트 이름이 지정되었는지에 따라 다른 웹 서비스를 호출하여 문제를 악화시킬 수 있습니다. .Current를 사용하면 단일 인스턴스를 실행하지 않는 경우에 유용합니다.이 경우에는 항상 null이 아닌 컨텍스트 개체가 없으므로 위의 모든 경우에 해당됩니다. 다른 사람이 더 단단한 것이 있으면 공유하십시오 :

0

다음 코드를 사용하여 server (host)의 현재 기본 주소를 가져올 수 있습니다.

using System.ServiceModel; 

var baseAddress = OperationContext.Current.Host.BaseAddresses[0].Authority; 
관련 문제