2017-02-09 5 views
1

Мне нужно изменить адрес привязки конечной точки WCF. Вот некоторые сведения об этом вопросе:Адрес конечной точки WCF с использованием https (WebHttpBinding)

У меня есть служба класса NT (если это имеет значение, а не веб-сервис). Это создает System.ServiceModel.ServiceHost с конечной точкой которого адрес конечной точки создается следующим образом:

var epa = new EndpointAddress(string.Format("https://localhost:{0}/ServiceAPI/", 8181)); 

Связывание используется для ServiceEndpoint является WebHttpBinding с Mode=WebHttpSecurityMode.Transport (т.е. HTTPS).

Когда открывается ServiceHost, я могу перейти в командную строку и сделать «Netstat -a» и увидеть адрес, связанный с Listen as 0.0.0.0:8181.

До сих пор никаких проблем. Однако большой клиент поднял «проблему безопасности» с тем фактом, что, поскольку WCF «прослушивает» находится по адресу 0.0.0.0 вместо 127.0.0.1, потенциальный злоумышленник может подключиться к этому адресу с внешней машины. Тестирование, которое они построили, это использовать telnet 8181 с внешней машины, и если соединение происходит, то тест не выполняется. Запрос на изменение заключается в том, чтобы изменить службу на «прослушивание» на 127.0.0.1:8181, так что единственная возможность подключения к этому порту - от локальной машины.

Я сделал большое количество изменений, пытаясь заставить WCF «слушать» на «127.0.0.1» вместо «0.0.0.0». Во всех моих попытках единственный способ сделать это, чтобы установить HostNameComparisonMode к «Exact» и создать адрес конечной точки на этом пути:

var epa = new EndpointAddress(string.Format("https://127.0.0.1:{0}/ServiceAPI/", 8181)); 

(на самом деле, как в сторону, если я использую различные привязки, такие как NetTcpBinding, приведенный выше EndPointAddress. будет связываться с адресом «127.0.0.1:8181» без изменения HostNameComparisonMode. Он только внутренне переключается на «0.0.0.0:8181», когда я использую WebHttpBinding и не могу установить HostNameComparisonMode = Exact.)

Однако это (установка HostNameComparisonMode = Exact) вызывает сложное нарушение из-за того, что существующий сторонний c ode уже разработано, что попытки (на борту сервера) подключиться к «https://localhost:8181/ServiceAPI», а когда HostNameComparisonMode установлен в «Exact», WCF только когда-либо возвращает HTTP-ошибку 506 на любой запрос из-за разницы между «localhost» и «127.0 .0.1" .

В настоящее время я ищу либо средство настройки WCF для привязки к «127.0.0.1:8181» (как определено netstat -a) с параметром HostNameComparisonMode, все еще установленным для параметра «StrongWildcard» по умолчанию. Или запретить любую возможность сделать это, другое творческое предложение вызвать подключения, поступающие с внешних компьютеров, к невозможности подключения к этому порту. (Тест будет состоять в том, чтобы использовать «telnet servername 8181» с другого компьютера, и он не смог подключиться.)

Любые идеи? Благодаря!

+0

Почему вы используете https, когда требование должно подключаться только из одного окна ? – nvoigt

+0

Это связанное сообщение переполнения стека: http://stackoverflow.com/questions/15428610/wcf-service-endpoint-localhost-confusion – SteveSims

+0

hi nvoigt, эта же проблема возникает с http (то есть WebHttpBinding с Transport.None) It только NetTcpBinding не возникает.Если кто-то спрашивает, почему не использовать, необязательно, NetTcpBinding, то, ну, --- Приложение, в общем, требует подключения из других ящиков и защищено с помощью https :. Однако один конкретный клиент хочет, чтобы приложение настраивалось так, чтобы оно не было доступно извне. – SteveSims

ответ

0

Если я понимаю вас правильно, вы хотите подключиться с удаленной машины к этому адресу, так что вы можете попробовать BasicHttpBinding? Кроме того, вы можете попробовать разместить его по адресу: «https://localhost: {0}/ServiceAPI /«, 8181 ». Исправьте PLS, если я понимаю, что вы ошибаетесь.

+0

Я изучу использование BasicHttpBinding и вернусь с комментарием к тому, что я узнаю. – SteveSims

+0

BasicHttpBinding также внутренне переключает адрес привязки с «localhost» на «0.0.0.0», как это делает WebHttpBinding. – SteveSims

+0

ok, попробуйте PLS следующее: запустите приложение, введите в локальном браузере машины «https: // localhost: 8181/ServiceAPI» - обычно вы должны видеть функции сервера wcf. Затем попробуйте открыть в браузере удаленной машины следующую строку: «https: // IP хост-машины: 8181/ServiceAPI» - у вас есть тот же результат? –

Смежные вопросы