2015-08-18 5 views
0

У меня есть сайт, который должен иметь возможность создавать http и https-соединение. У меня установлен IIS, поэтому он принимает https как для SOAP, так и для REST-запросов, это работает.WCF - Http и https на SOAP и REST

Моя проблема заключается в том, что клиенты, у которых нет https, могут использовать мой сайт. Если они не имеют его я удалить сайт связывания для https:

После того как я делаю это я получаю следующее исключение при доступе к сайту: «Не удалось найти базовый адрес, который соответствует схеме HTTP для конечной точки с связывание»

Моя web.config выглядит следующим образом:

<system.serviceModel> 
<bindings> 
    <basicHttpBinding> 
    <binding name="basicHttpBinding" messageEncoding="Text"> 
    </binding> 

    <binding name="basicHttpsBinding" messageEncoding="Text"> 
     <security mode="Transport" /> 
    </binding> 

    </basicHttpBinding> 
    <webHttpBinding> 
    <binding name="webHttpBinding"> 
    </binding> 

    <binding name="webHttpsBinding">  
     <security mode="Transport" /> 
    </binding> 
    </webHttpBinding> 
</bindings> 

<services> 
    <service name="XXX.XXX"> 
    <endpoint address="rest" behaviorConfiguration="RestBehavior" binding="webHttpBinding" 
       bindingConfiguration="webHttpBinding" contract="XXX.IXXX"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 

    <endpoint address="rest" behaviorConfiguration="RestBehavior" binding="webHttpBinding" 
       bindingConfiguration="webHttpsBinding" contract="XXX.IXXX"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 

    <endpoint address="" behaviorConfiguration="XXXBehavior" binding="basicHttpBinding" 
       bindingConfiguration="basicHttpBinding" contract="XXX.IXXX"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 

    <endpoint address="" behaviorConfiguration="XXXBehavior" binding="basicHttpBinding" 
       bindingConfiguration="basicHttpsBinding" contract="XXX.IXXX"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 

    <endpoint address="mex" binding="mexHttpBinding" name="Mex" contract="IMetadataExchange" /> 
    </service> 
</services> 
<behaviors> 
    <endpointBehaviors> 
    <behavior name="XXXBehavior"> 
     <webHttp/> 
    </behavior> 

    <behavior name="RestBehavior"> 
     <webHttp helpEnabled="true" defaultBodyStyle="Bare" defaultOutgoingResponseFormat="Json" 
       automaticFormatSelectionEnabled="false" faultExceptionEnabled="true" /> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name=""> 
     <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 

Что я делаю неправильно?

+2

Что значит «клиенты, у которых нет https»? –

+0

@GlenThomas Приложение, которое я разрабатываю, может быть установлено на разных серверах, некоторые из клиентов не имеют сертификата https для использования. – DannyBiezen

+0

Я вижу. Они могут использовать самоподписанный сертификат. Если приложение нуждается в безопасном соединении, то оно лучше, чем ничего –

ответ

3

Вы используете конфигурацию привязки с транспортной безопасностью (security mode="Transport"), но затем вы настраиваете IIS, чтобы не поддерживать ее.

Если вы удалите HTTPS из IIS, вы должны удалить конечные точки HTTPS из web.config.

+0

Благодарим вас за ответ. Знаете ли вы, можно ли настроить мой web.config таким образом, чтобы я мог сохранить текущие настройки, но отключить basicHttpsBinding, когда IIS не разрешает https? – DannyBiezen

+0

Вы можете генерировать конечные точки в коде, а не указывать их в файле web.config. Это, вероятно, лучшее решение. –

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