Внедряването на 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 кутия. Бих предположил това, защото създадох съвсем ново приложение ASP.NET 3.5 WCF и го внедрих на нов 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 или нещо подобно - изглежда нямате част от virtualdir във вашия URL адрес - person marc_s; 22.02.2010
comment
Не, URL адресът е в чисто нов уебсайт, наречен ws.mycompany.com. Второ, мислех, че трябва да мога да го прегледам. Когато поискате конфигурация от страна на клиента, ако просто преглеждам в нея през мрежата, няма да имам никаква конфигурация. Ако се опитам да създам чисто нов ASP.NET или ASP.NET MVC проект, ще оставя конфигурацията по подразбиране и ще се опитам да щракна с десния бутон върху проекта и да избера Добавяне на препратка към услуга. Когато въведа този URL, получавам другото изключение. Така че, предполагам, че съм объркан защо конфигурацията от страна на клиента би причинила това. - person Jason Gaylord; 22.02.2010
comment
@Jason: това е, което ме обърква - продължаваш да казваш, че просто разглеждаш сайта - това означава ли, че използваш (или искаш) да използваш 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 Test Client? Той се крие дълбоко в директорията BIN на Visual Studio - и е изключително полезно да се опитате да видите дали вашата WCF услуга е видима (по отношение на метаданните, необходими за VS Add Service Reference) за външния свят. Google for WCF Test Client и погледнете във вашата папка 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