Озадачен "удаленный сервер вернул ошибку: (403) запрещено" с WCF сервисом в https



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



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



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



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



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



Я публикую службу WCF в ее расположении https



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



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



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



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



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



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



Служба 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>
734   6  

6 ответов:

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

Вот сценарий и решение:

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

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

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

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

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

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

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

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

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

Comments

    Ничего не найдено.