У меня есть 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.