Настройте WCF для прослушивания только LOCALHOST - PullRequest
8 голосов
/ 02 марта 2010

Подобно ограничению веб-сервера разработки Visual Studio (Cassini), заключающемуся в том, что он работает только на локальном хосте, у меня есть реализация службы WCF, которая требуется только на локальном хосте.

Я бы не возражал против того, чтобы другие машины имели доступ, за исключением того, что брандмауэр Windows предлагает разрешить программе прослушивать внешний сетевой адаптер. Поскольку это необходимо только для внутреннего использования, я бы предпочел ограничить конфигурацию на стороне сервера WCF, чтобы она не отключала детектор брандмауэра.

Является ли binding.HostNameComparisonMode = HostNameComparisonMode.Exact правильным решением? Я не вижу, как этого достаточно.

====

Как и Cassini, эта реализация Службы является заменой чего-то еще, что требует сетевого взаимодействия. Клиент может быть настроен для подключения к реальному серверу или к фальшивой реализации, работающей на localhost.

Ответы [ 2 ]

7 голосов
/ 02 марта 2010

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

Из раздела MSDN под названием "Выбор транспорта" (выделено мной):

Когда использовать именованный трубопроводный транспорт

Именованный канал - это объект в Ядро операционной системы Windows, такое как раздел общей памяти, процессы могут использовать для общения. именованный канал имеет имя и может использоваться для односторонней или дуплексной связи между процессами на одной машине.

Когда требуется связь между различными приложениями WCF на один компьютер, и вы хотите предотвратить любое общение с другим машина , затем используйте именованные трубы транспорт. Дополнительное ограничение является то, что процессы, запущенные из Windows Удаленный рабочий стол может быть ограничен тот же Windows Remote Desktop сессия, если они не поднялись привилегии.

Это удовлетворяет вашим точным требованиям и должно быть не более, чем изменение конфигурации.

0 голосов
/ 02 марта 2010

Это зависит от того, как вы его размещаете. Если вы находитесь в IIS7 или WAS, то WCF использует режим соответствия IIS. В противном случае, если вы используете HostNameComparisonMode.Exact, то да, имя хоста всегда будет критическим фактором при сопоставлении. Если имя хоста не совпадает, отправка обычно завершится неудачей.

Следует отметить, что точный не является на 100% точным ... он все же допускает некоторые различия в имени хоста. Если у вас есть и имя хоста NetBios, и полное DNS-имя, сопоставление все равно будет происходить, так как WCF рассматривает эти два как одно и то же.

System.ServiceModel.BasicHttpBinding.HostNameComparisonmode

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...