Как я могу проверить, совпадают ли два адреса конечной точки? - PullRequest
1 голос
/ 23 февраля 2012

Моя программа - это служба WCF, которая публикует несколько методов и имеет несколько клиентов. Он хранит список клиентов в базе данных. В некоторых из методов мне нужно запросить данные вызывающего абонента из базы данных. Этот вопрос Как служба может узнать вызывающего абонента? и связанный ответ Получить адрес клиента в WCF показывает, как получить IP-адрес вызывающего абонента. Тем не менее, обычно поле адреса в моей таблице клиентов не имеет IP-адреса, а выглядит так:

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

Какие действительные адреса конечных точек. Давайте представим, что я использую решение в связанном ответе и получаю IP-адрес своего абонента (скажем, http://192.80.212.21:80/). Однако в базе данных клиент хранится как http://computerName:80/ Как я могу проверить, что эти два адреса совпадают, чтобы я мог получить соответствующую запись клиента из базы данных?

Количество клиентов очень мало, поэтому проблема с производительностью при повторении каждой строки в базе данных может быть незначительной.

1 Ответ

0 голосов
/ 23 февраля 2012

Вам нужно будет выполнить поиск DNS , чтобы определить имя хоста, с которым связан IP-адрес клиента:

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();

В этот момент вы можете сопоставить полученный clientUriна адреса, хранящиеся в базе данных.

...