2012-02-23 2 views
1

내 프로그램은 여러 가지 메서드를 게시하고 여러 클라이언트가있는 WCF 서비스입니다. 데이터베이스의 클라이언트 목록을 저장합니다. 일부 메서드에서는 데이터베이스에서 호출자의 데이터를 쿼리해야합니다. 이 question How can service know the caller?과 연결된 대답 Get the Client’s Address in WCF은 발신자의 IP를받는 방법을 보여줍니다. 그러나 일반적으로 클라이언트 테이블의 주소 필드에는 IP가 없지만 다음과 같은 것들이 있습니다.두 종점 주소가 같은지 어떻게 확인할 수 있습니까?

http://localhost:80/ 
http://computerName:80/ 
http://computerName.domain.com:80/ 

유효한 끝점 주소는 다음과 같습니다. 연결된 솔루션에서 솔루션을 사용한다고 가정 해 보겠습니다. 발신자의 IP 주소 (예 : http://192.80.212.21:80/)를 얻습니다. 그러나 데이터베이스에서 클라이언트는 http://computerName:80/으로 저장됩니다.이 두 주소가 같은지 확인하여 데이터베이스에서 해당 클라이언트의 항목을 가져올 수 있습니까?

클라이언트 수가 매우 적으므로 데이터베이스의 모든 행을 반복 할 때 발생하는 성능 문제는 무시할 수 있습니다.

+0

'http : // localhost : 80 /'및'http : // computerName : 80 /'은 동일하지 않습니다. 첫 번째 항목은 컴퓨터 외부에서 액세스 할 수 없습니다. 그러므로 다르다. – Aliostad

+0

참으로. 그러나 클라이언트가 동일한 컴퓨터에서 온 경우 주소를 입력 한 사람이 데이터베이스에 입력 할 수 있으며 동일하게 작동합니다. –

답변

0

당신은 클라이언트의 IP 주소 연관된 호스트 이름을 결정하기 위해 DNS 조회을해야 할 것이다 : 데이터베이스에 저장된 주소로 얻어진 clientUri을 일치시킬 수 있습니다 그 시점에서

var clientEndpoint = OperationContext.Current 
    .IncomingMessageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; 
var clientHostName = Dns.GetHostEntry(clientEndpoint.Address).HostName; 
var clientPort = clientEndpoint.Port; 

var clientUri = new UriBuilder("http", clientHostName, clientPort).ToString(); 

을 .

+0

정적으로 무엇을 의미합니까? –

+0

@LouisRhys [고정 IP 주소] (http://en.wikipedia.org/wiki/IP_address#Uses_of_static_addressing)는 네트워크의 특정 컴퓨터에 직접 연결됩니다. 그러나 DNS 조회를 통해 호스트 이름에 IP 주소를 연결할 수 있기 때문에 여기서는 그다지 중요하지 않습니다. 내 대답을 바로 잡았어. –