Как получить вызываемый адрес запроса на отдых WCF? - PullRequest
0 голосов
/ 09 января 2012

Я реализовал REST Webservice, который возвращает (после аутентификации через RFC 2617 HTTP Digest Authentication) документ XML с ссылками на соответствующие ресурсы.

Вот пример запроса:

http://172.32.42.53:8080/Service.svc/user/123

Результат может выглядеть так:

<?xml version="1.0" encoding="utf-8"?>
<UserList xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <User>
    <ID>2</ID>
    <UserName>CHI</UserName>
    <OutlineLink xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://demo:8080/Service.svc/Users/2/Outline/" cache="no"/>
    <SettingsLink xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://demo:8080/Service.svc/Users/2/Settings/" cache="no"/>
    <CatalogsLink xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://demo:8080/Service.svc/Users/2/Catalogs/" cache="no"/>
    <LastName>Test</LastName>
  </User>
</UserList>

Итак, проблема сейчас такова:

Если пользователь вызывает веб-сервис через IP-адрес, первое рукопожатие будет происходить по IP-адресу, а не по имени DNS.Таким образом, аутентификация работает только в том случае, если второй вызов (к указанному ресурсу) снова будет выполнен по IP-адресу.Я попытался сделать это с помощью следующей команды:

OperationContext.Current.IncomingMessageProperties.Via.ToString();

Но мой веб-сервис всегда возвращает DNS сервера, а не "вызываемый адрес".

Есть ли возможность получить вызываемый адрес?Так что я могу динамически возвращать вызываемый адрес (IP или DNS).Было бы здорово получить решение.Относительные URL не разрешены для ссылок.

Спасибо за помощь!

1 Ответ

1 голос
/ 09 января 2012

Можете ли вы попытаться получить вызываемый адрес из серверных переменных запроса? Я полагаю, что ваш веб-сервис должен быть в режиме совместимости asp.Net для доступа к этому. Что-то вроде «REMOTE_HOST», «HTTP_HOST», «SERVER_NAME» и т. Д. *

Проверьте эту ссылку для списка серверных переменных

...