Получение 404 без ошибки прослушивания конечной точки WCF 4.0 с использованием Https basicHttpBinding через безопасность транспорта - PullRequest
0 голосов
/ 23 марта 2012

Я пытаюсь настроить безопасность https для моей веб-службы wcf, размещенной в IIS 7.5. Я просмотрел каждую статью, которую могу найти в Интернете по этому поводу, и попробовал практически каждую конфигурацию или трюк IIS, которые я мог найти, или вариант. Я думаю, что это может быть IIS, проблема конфигурации уровня Windows. Мы используем SSL-сертификат типа «подстановочный знак», например * .mycompany.com. Этот сертификат используется на 3 других сайтах, уже находящихся в том же IIS, если это имеет какое-либо отношение. Кто-нибудь знает, с чем я сталкиваюсь здесь ??? Это публичный сервер, без TEST и http привязка работает нормально. У меня такая же проблема https на моих серверах разработки и производства. У нас есть другой веб-сайт https, и он отлично отправляет и получает данные. Я получаю исключение:

Конечная точка не прослушивала https://subdomain.mydomain.com/MyService.svc, которые могут принять сообщение. Это часто вызывается неправильным адресом или действием SOAP.

Внутреннее исключение:

Удаленный сервер возвратил ошибку: (404) Not Found.

Вот мой web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
   <appSettings file="LocalAppSettings.config">
      <!--<add key="CustomIISServiceHostEndPoint" value="https://subdomain.mydomain.com/MyService.svc" />-->
   </appSettings>
   <system.web>
      <compilation debug="true" targetFramework="4.0" />
      <customErrors mode="Off" />
  </system.web>
  <system.serviceModel>
      <bindings>
  <basicHttpBinding>
    <binding name="COLWebServiceBinding" maxReceivedMessageSize="134217727" sendTimeout="00:03:00" receiveTimeout="00:03:00">
        <security mode="Transport">
           <transport clientCredentialType="None" />
        </security>
        <readerQuotas maxArrayLength="65536" maxBytesPerRead="65536" maxStringContentLength="134217727" />
     </binding>
  </basicHttpBinding>
</bindings>
<services>
  <service behaviorConfiguration="COLWebService.ServiceBehavior" name="COLWebService">
    <endpoint address="https://subdomain.mydomain.com/MyService.svc"
              binding="basicHttpBinding"
              contract="MyCompany.COLWebService.ICOLWebService"
              bindingConfiguration="COLWebServiceBinding" />
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
  </service>
</services>
<extensions>
  <behaviorExtensions>
    <add name="errorHandler" type="MyCompany.COLWebService.ErrorHandlerBehaviorExtensionElement, MyCompany.COLWebService" />
  </behaviorExtensions>
</extensions>
<behaviors>
  <serviceBehaviors>
    <behavior name="COLWebService.ServiceBehavior">
      <serviceMetadata httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
    <!--<behavior name="">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>-->
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false">
</serviceHostingEnvironment>
 </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer> 
 </configuration>

А вот мой клиент app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                 <binding name="wsHttpBinding_ICOLWebService" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:03:00"
                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferPoolSize="524288" maxReceivedMessageSize="134217727"
                messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true">
                      <readerQuotas maxStringContentLength="134217727" maxArrayLength="65536"
                    maxBytesPerRead="65536" />
                      <security mode="Transport">
                          <transport clientCredentialType="None" proxyCredentialType="None" />
                     </security>
                 </binding>
            </basicHttpBinding>
         </bindings>
        <client>
             <endpoint address="https://subdomain.mydomain.com/MyService.svc"
            binding="basicHttpBinding" bindingConfiguration="wsHttpBinding_ICOLWebService"
            contract="COLWebService.ICOLWebService" name="wsHttpBinding_ICOLWebServiceEP" />
          </client>
    </system.serviceModel>
  </configuration>

Ответы [ 4 ]

0 голосов
/ 25 марта 2012

Ваш раздел модели сервиса должен быть таким

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" httpsGetUrl="/ssl"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
          <dataContractSerializer maxItemsInObjectGraph="6553600" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding name="TransportSecurity" maxReceivedMessageSize="2147483647">
          <security mode="Transport">
            <transport clientCredentialType="None"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service name="COLWebService.Service" behaviorConfiguration="">
        <endpoint address="/ssl" binding="basicHttpBinding" bindingConfiguration="TransportSecurity" contract="MyCompany.COLWebService.ICOLWebService"/>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

И ваши клиенты будут получать доступ к сервису через https https://subdomain.mydomain.com/MyService.svc/ssl, через http, как и старый https://subdomain.mydomain.com/MyService.svc

0 голосов
/ 23 марта 2012

Возможно, привязка https не настроена для нового сайта.

В IIS выберите сайт, затем щелкните дополнительные параметры и проверьте содержимое привязок.Убедитесь, что https есть в списке.

Редактировать

Другая вещь, которая может быть, это то, что обработчик svc не активирован.ASP.Net включен для сайта?

Вы должны сначала протестировать его без https, чтобы убедиться, что проблема связана с https.

Редактировать 2

Убедитесь, что сайт запущен.Вы проверили, что можете получить доступ к svc через браузер.

У вас есть несколько сайтов на машине, все используют https.Вы настроили заголовки хостов, чтобы все сайты могли использовать https?Https на этом сайте находится в другом порту?

0 голосов
/ 24 марта 2012

Откройте файл .svc - я предполагаю, что он не ссылается на COLWebService в качестве службы.

Ваш файл конфигурации содержит:

name="COLWebService"

в объявлении службы.Это должно соответствовать именованной службе .SVC, которая, судя по указанному вами URL, будет «MyService».

0 голосов
/ 23 марта 2012

Вы можете вручную добавить значения заголовка узла в сертификаты SSL, изменив файл applicationhost.config в system32 \ inetsrv.Найдите раздел для своего экземпляра IIS.

...