Я никогда раньше не развертывал службу WCF в IIS 6. У меня есть служба, которую я развертываю в IIS 6, используя конфигурацию по умолчанию как часть проекта WCF. С тех пор я упростил конфигурацию, думая, что это могло быть проблемой. Вот ошибка, которую я получаю, если перехожу к службе в браузере:
Ошибка HTTP 403.1 - Запрещено: доступ на выполнение запрещен.
Моя конфигурация теперь выглядит так:
<system.serviceModel>
<services>
<service name="MyCompany.WebServices.MyService">
<endpoint address="" binding="basicHttpBinding" contract="MyCompany.WebServices.IMyService" />
</service>
</services>
</system.serviceModel>
Если я попытаюсь добавить его в качестве ссылки в ASP.NET MVC, я получу следующее:
При загрузке "http://ws.mycompany.com/MyService.svc" произошла ошибка . Запрос не выполнен с HTTP-статусом 403: Запрещено. Метаданные содержат ссылку, которую невозможно разрешить: 'http://ws.mycompany.com/MyService.svc < / а> '. HTTP-запрос был запрещен со схемой аутентификации клиента «Анонимный». Удаленный сервер возвратил ошибку: (403) Запрещено. Если служба определена в текущем решении, попробуйте создать решение и снова добавить ссылку на службу.
Есть идеи, что может происходить?
ОБНОВЛЕНО:
Похоже, это проблема конфигурации моего IIS 6. Я предполагаю это, потому что я создал новое приложение WCF ASP.NET 3.5 и развернул его по новому URL-адресу по адресу http://ws.unitedoneresources.com/Service1.svc. Если я попытаюсь вызвать эту службу, я получу ту же ошибку HTTP, указанную выше. Вся конфигурация сервиса следующая:
<system.serviceModel>
<services>
<service name="WcfService1.Service1" behaviorConfiguration="WcfService1.Service1Behavior">
<!-- Service Endpoints -->
<endpoint address="" binding="wsHttpBinding" contract="WcfService1.IService1">
<!--
Upon deployment, the following identity element should be removed or replaced to reflect the
identity under which the deployed service runs. If removed, WCF will infer an appropriate identity
automatically.
-->
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="WcfService1.Service1Behavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Опять же, это совершенно новое приложение ASP.NET 3.5 WCF, поэтому я ничего не менял в самом проекте.