Мне нужно изменить адрес привязки конечной точки 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» с другого компьютера, и он не смог подключиться.)
Любые идеи? Благодаря!
Почему вы используете https, когда требование должно подключаться только из одного окна ? – nvoigt
Это связанное сообщение переполнения стека: http://stackoverflow.com/questions/15428610/wcf-service-endpoint-localhost-confusion – SteveSims
hi nvoigt, эта же проблема возникает с http (то есть WebHttpBinding с Transport.None) It только NetTcpBinding не возникает.Если кто-то спрашивает, почему не использовать, необязательно, NetTcpBinding, то, ну, --- Приложение, в общем, требует подключения из других ящиков и защищено с помощью https :. Однако один конкретный клиент хочет, чтобы приложение настраивалось так, чтобы оно не было доступно извне. – SteveSims