Прерывание "Удаленным сервером" была возвращена ошибка: (403) Запрещено "с помощью службы WCF в https

У меня есть служба WCF, из-за этой ошибки я свалился почти ничего. Это подталкивает меня к стене. Вот что у меня сейчас.

Очень простая служба WCF с одним методом, который возвращает строку со значением "test".

Очень простое веб-приложение, которое использует службу и помещает значение строки в метку.

Веб-сервер под управлением IIS 6 в Win 2003 с сертификатом SSL.

Другие службы WCF на том же сервере, который работает.

Я публикую для него службу WCF. https location

Я запускаю веб-приложение в режиме отладки в VS и отлично работает.

Я публикую в нем веб-приложение https на том же сервере, где служба WCF находится под тем же сертификатом SSL

Я получаю: "Удаленный сервер вернул ошибку: (403) Запрещено"

Я изменил почти все настройки в IIS, а также WCF и веб-приложения безрезультатно. Я сравнивал настройки в службах WCF, которые работают, и все одинаково.

Ниже приведены настройки в web.config для службы WCF и WEB-приложения:

Похоже, проблема связана с веб-приложением, но у меня нет идей. Любые идеи:

Служба WCF:

  <system.serviceModel>
<bindings>

                    

<client />

<services>
  <service behaviorConfiguration="Ucf.Smtp.Wcf.SmtpServiceBehavior" name="Ucf.Smtp.Wcf.SmtpService">
    <host>
      <baseAddresses>
        <add baseAddress="https://test.net.ucf.edu/webservices/Smtp/" />
      </baseAddresses>
    </host>
    <endpoint address="" binding="wsHttpBinding" contract="Ucf.Smtp.Wcf.ISmtpService" bindingConfiguration="SSLBinding">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
  </service>
</services>

<behaviors>
  <serviceBehaviors>
    <behavior name="Ucf.Smtp.Wcf.SmtpServiceBehavior">
      <serviceMetadata httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" httpsHelpPageEnabled="True"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

Веб-приложение:

    <system.serviceModel>
    <bindings><wsHttpBinding>
<binding name="WSHttpBinding_ISmtpService" closeTimeout="00:01:00"
 openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
 bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
 maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
 textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
 <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
  maxBytesPerRead="4096" maxNameTableCharCount="16384" />
 <reliableSession ordered="true" inactivityTimeout="00:10:00"
  enabled="false" />
 <security mode="Transport">
  <transport clientCredentialType="None" proxyCredentialType="None"
   realm="" />
  <message clientCredentialType="Windows" negotiateServiceCredential="true"
   establishSecurityContext="true" />
 </security>
</binding>

<client>


<endpoint address="https://net228.net.ucf.edu/webservices/smtp/SmtpService.svc"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ISmtpService"
contract="SmtpService.ISmtpService" name="WSHttpBinding_ISmtpService">
<identity>
 <dns value="localhost" />
</identity>

  </client>
</system.serviceModel>

Ответ 1

Я собираюсь ответить на свой вопрос, потратив часы и часы на эту проблему. Надеюсь, это поможет всем другим людям, которые били головой о стену, пытаясь понять это. Наконец, мы получили сетевого администратора и решили это.

Здесь сценарий и решение:

У нас есть производственный сервер - все работает нормально. У нас есть тестовый сервер - мы получаем 403 запрещенную ошибку. Отладка локально работает нормально.

Все настройки идентичны или так мы думали.

Есть одна настройка, которая была неправильной. В IIS в свойствах виртуального каталога веб-службы на вкладке "Безопасность каталога" вторая кнопка "Редактировать" предназначена для ограничений IP. У нас было настроено запретить доступ ко всем IP-адресам, за исключением списка, который должен был включать IP-адрес тестового сервера. IP-адрес тестового веб-сервера не был предоставлен. Причина, по которой у него не было прав, было то, что он был недавно клонирован с производственного виртуального сервера, и этот параметр никогда не был настроен для добавления тестового виртуального сервера.

Ответ 2

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

Ответ 3

Единственное, что выпрыгивает на меня, - это передать идентификатор Windows с сообщением, это может вызвать проблему разрешений, если передаваемая учетная запись пользователя не имеет доступа к службе WCF. Потенциально нужна олицетворение в веб-приложении?

Ответ 4

По умолчанию привязки WCF не разрешают анонимный (без авторизации) доступ. Вам нужно изменить привязки, чтобы разрешить это:

  <wsHttpBinding> 
    <binding ...> 
        <security mode ="None"/> 
    </binding> 
  </wsHttpBinding>

Ответ 5

В моем случае у моего пользователя apppool не было права на чтение\запись на "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Временные файлы ASP.NET" по какой-либо причине.

Ответ 6

Убедитесь, что у вас установлен compilation debug="true".