Развертывание WCF в IIS 6 приводит к ошибке разрешения 403

Я никогда раньше не развертывал службу 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, поэтому я ничего не менял в самом проекте.


person Jason Gaylord    schedule 19.02.2010    source источник
comment
Служба размещена на том же компьютере, с которого вы запрашиваете?   -  person Jeff    schedule 20.02.2010
comment
Неа. Один из них - это сервер базы данных, а другой - сервер IIS. Все вызовы базы данных выполняются внутри библиотеки классов, использующей EF.   -  person Jason Gaylord    schedule 22.02.2010
comment
Я обновил проблему выше. Я попытался настроить в Интернете IIS разрешения на выполнение, перезапустил IIS, и это не сработало. Я также пробовал это на коробке IIS7, но безрезультатно. Должно быть, я что-то делаю неправильно.   -  person Jason Gaylord    schedule 22.02.2010


Ответы (4)


Я взбесил веб-сайт, установил WCF на IIS 6 (используя ServiceModelReg.exe / i / x в командной строке) и повторно развернул. Это сработало!

Спасибо!

person Jason N. Gaylord    schedule 01.03.2010

Нашел этот вопрос в поисках решения той же проблемы. Я забыл изменить разрешения на «Сценарии и исполняемые файлы» в каталоге служб. Я был на II7

person kenny    schedule 02.08.2011

Вы действительно не даете нам много информации - чего не хватает, так это битов конфигурации на стороне сервера, которые показывают нам, как вы настраиваете безопасность - не могли бы вы обновить свой вопрос и показать нам все внутри <system.serviceModel> в конфигурации на стороне вашего сервера и на вашем клиенте, вызывающем сервер ??

Если просто угадать системные значения по умолчанию, использование basicHttpBinding приведет к отсутствию настроек безопасности по умолчанию - и будет выглядеть так, как будто ваша серверная конфигурация требует некоторой формы безопасности. Кажется, что ваши настройки безопасности не синхронизированы, что приводит к этой ошибке.

Другой момент: как вы настроили IIS? Вы создали виртуальный каталог для своей службы? Обычно при размещении в IIS URL-адрес вашей службы определяется именем сервера (плюс, возможно, портом), виртуальным каталогом, в котором находится ваш файл * .svc, а также именем и расширением самого файла svc.

person marc_s    schedule 20.02.2010
comment
Что касается сервера, то то, что я перечислил выше, есть у меня сейчас. На стороне клиента, опять же, обычное приложение ASP.NET MVC. В IIS служба настраивается на совершенно новом веб-сайте, на котором больше ничего нет. - person Jason Gaylord; 22.02.2010
comment
@Jason: Хорошо, но не могли бы вы показать нам и конфигурацию на стороне клиента - там должна быть какая-то конфигурация! - person marc_s; 22.02.2010
comment
@Jason: вы создали отдельный виртуальный каталог для своей службы? Вы поместили файл * .svc в этот каталог? Кажется, я не вижу виртуального каталога в вашем URL: 'http://ws.mycompany.com/MyService.svc' или я что-то упустил? Обычно это http://server/virtualdir/yourservice.svc или что-то подобное - похоже, в вашем URL-адресе нет части virtualdir. - person marc_s; 22.02.2010
comment
Нет, URL-адрес находится на новом веб-сайте ws.mycompany.com. Во-вторых, я подумал, что у меня должен быть доступ к нему. Когда вы запрашиваете конфигурацию на стороне клиента, если я просто просматриваю ее через Интернет, у меня не было бы никакой конфигурации. Если я попытаюсь создать новый проект ASP.NET или ASP.NET MVC, я оставлю конфигурацию по умолчанию и попытаюсь щелкнуть проект правой кнопкой мыши и выбрать «Добавить ссылку на службу». Когда я ввожу этот URL, я получаю другое исключение. Итак, я думаю, я не понимаю, почему конфигурация на стороне клиента может вызвать это. - person Jason Gaylord; 22.02.2010
comment
@ Джейсон: вот что меня смущает - вы все время говорите, что просто просматриваете сайт - означает ли это, что вы (или хотите) используете REST ?? Потому что в этом случае привязка на стороне сервера неверна - вам придется использовать webHttpBinding вместо basicHttpBinding ........ - person marc_s; 22.02.2010
comment
Что ж, я пытаюсь сделать следующие две вещи: 1) Откройте браузер (например, firefox) и перейдите по URL-адресу 'ws.mycompany.com/MyService.svc 'или 2) Откройте VS 2008. Добавьте ссылку на службу, перейдя по указанному выше URL. Мне бы очень хотелось, чтобы работал только вариант 2, но я пытался протестировать с использованием 1. Я полагаю, что привязки не позволяют 1, поэтому меня больше беспокоит разрешение VS добавлять ссылку. - person Jason Gaylord; 22.02.2010
comment
@Jason: да, №1 не сработает - вы ничего не увидите для службы WCF по умолчанию. Вы знаете тестового клиента WCF? Он скрывается глубоко внутри каталога BIN Visual Studio - и чрезвычайно полезно пытаться увидеть, видна ли ваша служба WCF (с точки зрения метаданных, необходимых для VS Add Service Reference) для внешнего мира. Google для тестового клиента WCF и найдите файл в папке VS \ Common7 \ IDE - попробуйте, это того стоит! - person marc_s; 22.02.2010
comment
Итак, какие настройки безопасности по умолчанию, мне стоит побеспокоиться, чтобы настроить их, чтобы я мог добавить ссылку на службу в VS. - person Jason Gaylord; 23.02.2010

У нас были похожие симптомы, но только с командами PUT и DELETE в IIS 6.0.

По умолчанию расширение .svc в нашем приложении IIS разрешало только команды GET и POST.

Добавление глаголов (или разрешение всех глаголов) для расширения .svc для приложения устранило проблему.

person Jeremy    schedule 28.01.2011