Вопрос

Я изменяю свой WCF API, чтобы включить новую службу, которая должна быть доступна только для внутренних IP-адресов.Все сервисы в моем API доступны в SOAP, POX и JSON.То, что я ищу, - это поведение или что-то еще, что позволяет мне реализовать простой фильтр IP-адресов, обрабатывать запросы с внутренних IP-адресов и запрещать все остальное.Я бы хотел, чтобы это работало в конфигурации, потому что все остальные сервисы в API должны оставаться доступными в Интернете.Я немного погуглил, но не смог найти ничего подобного, встроенного в WCF.Я что-то упускаю?

Это было полезно?

Решение

Хорошо, я разобрался с этим, и, на мой взгляд, это довольно ловко.Я внедрил систему IP-фильтрации в качестве служебного поведения, затем добавил ее в свой сервис в web.config.Вот мой новый раздел "Поведение веб-конфигурации":

<serviceBehaviors>
    <behavior name="ServiceBehaviour">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
    <behavior name="RestrictedServiceBehaviour">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <IPFilter filter="172.*.*.* 127.0.0.1" />          
    </behavior>
  </serviceBehaviors>

Класс IPFilter реализует IDispatchMessageInspector, чтобы перехватить запрос как можно скорее, проверить IP-адрес клиента и выдать исключение, если он не соответствует фильтру.Если кому-то интересно, я могу опубликовать свой код.

Другие советы

Если ваша служба размещена в IIS, то вы можете сделать это с помощью IIS для каждого веб-сайта (возможно, для каждого приложения, но я не знаю).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top