Публикация службы WCF в IIS с поддержкой как HTTP, так и HTTPS. - PullRequest
2 голосов
/ 16 января 2011

У меня есть WCF-служба, настроенная с двумя конечными точками с использованием webHttpBinding, одна для http и другая для https.Они используют один и тот же адрес, конечные точки просто отличаются используемым протоколом:

<services><br> <service name="Blubb.ClientService"><br> <endpoint binding="webHttpBinding" bindingConfiguration="webBindingConfig" behaviorConfiguration="webBehaviour" contract="Blubb.Contracts.IClientService"/><br> <endpoint binding="webHttpBinding" bindingConfiguration="sslWebBindingConfig" behaviorConfiguration="webBehaviour" contract="Blubb.Contracts.IClientService"/> </service><br> <services>

, используя следующие поведения и привязки:

<behaviors><br> <endpointBehaviors><br> <behavior name="webBehaviour"><br> <webHttp/><br> </behavior><br> </endpointBehaviors><br> </behaviors><br> <bindings><br> <webHttpBinding><br> <binding name="webBindingConfig"><br> <security mode="None"/><br> </binding><br> <binding name="sslWebBindingConfig"><br> <security mode="Transport"/><br> </binding><br> </webHttpBinding><br> </bindings>

Обе конечные точки работают нормально, когда у меня установлен сертификат в IIS 6.

Когда сертификат не установлен, HTTPS-конечная точка определенно не будет работать.Но HTTP-Endpoint тоже не работает.Сбой с раздражающим исключением: когда я получаю доступ к сервису с http://localhost:8080/ClientManagement/ClientService.svc/GetPackageInfo, исключение:

Could not find a base address that matches scheme https for the endpoint with binding WebHttpBinding. Registered base address schemes are [http].

, что раздражает, потому что я не запрашивал HTTPS-URL.

Теперь, когда я разделил службу на две части, HTTP-доступ также работает на IIS, на котором не установлен SSL-сертификат:

<services><br> <service name="Blubb.ClientService"> <endpoint binding="webHttpBinding" bindingConfiguration="webBindingConfig" behaviorConfiguration="webBehaviour" contract="Blubb.Contracts.IClientService"/><br> </service><br> <service name="Blubb.ClientServiceSecure"><br> <endpoint binding="webHttpBinding" bindingConfiguration="sslWebBindingConfig" behaviorConfiguration="webBehaviour" contract="Blubb.Contracts.IClientService"/><br> </service><br> </services>

Проблема сейчас в том, что клиент должен использовать две разные конечные точки, а не просто менять протокол.У нас есть система, в которой клиент может включить SSL через наш инструмент конфигурирования в зависимости от своих потребностей в безопасности.Но я не хочу заставлять их менять web.config службы WCF.

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