ASP.NET — Ошибка развертывания IIS7 500 24 50 с использованием привязки веб-службы WCF без групп объявлений

#asp.net #wcf #iis-7.5 #wcf-binding #wcf-security

#asp.net #wcf #iis-7.5 #wcf-привязка #wcf-безопасность

Вопрос:

Справочная информация: Я получаю ошибку внутреннего сервера 500 24 50 после развертывания приложения, которое скомпилировано без ошибок на моем локальном компьютере. Сервер, на котором развернуто приложение, обладает высокой степенью безопасности и работает под управлением IIS 7.5, поэтому мне нужно указать доступ для чтения и записи для каждого каталога. Это приложение использует проверку подлинности Windows и веб-службу для заполнения выпадающих списков через прокси. Я думаю, что может возникнуть проблема с подключением к веб-службе, или проблема с безопасностью чтения / записи файлов, или проблема с аутентификацией active Directory.

По какой-то причине Internet Explorer только что отобразил ошибку «не удается загрузить веб-страницу».

Ошибка в Google Chrome:

  500 – Internal Server Error.
 There is a problem with the resource you are looking for, and it cannot be displayed. 
  

Сведения о файле журнала:

  #Software: Microsoft Internet Information Services 7.5
 #Fields: date time s-sitename s-computername s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs-version cs(User-Agent) cs(Cookie) cs(Referer) cs-host sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken

 2011-05-18 13:54:46 W3SVC1 FL-TPA-WEB-01 172.17.1.25 GET / - 80 - 
 172.17.1.25 HTTP/1.1 Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64;
  Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E) - -
 invitations.myagencyservices.com 500 24 50 1380 368 15
  

MSDN определяет ошибку в http://support.microsoft.com/kb/943891 как:

   500.24 - An ASP.NET impersonation configuration does not apply in Managed 
           Pipeline mode.
  

Web.Config код:

   <system.web>
  <customErrors mode="Off" ></customErrors>
  <compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
  <trace enabled="true" pageOutput="true" />


  <authentication mode="Windows"/> 
  <identity impersonate="true"/>  

    <authorization>          
    <allow users="algbmccarthy, algphoward" />               
    <allow roles="algACOMP_USER_ADMIN" />
    <allow roles="algACOMP_user_AMG" />
    <allow roles="algACOMP_user_BIG" />
    <allow roles="algACOMP_user_NIS" />
    <allow roles="algACOMP_user_GLA" />
    <allow roles="algACOMP_user_PIP" />
    <allow roles="algACOMP_user_PSM" />
    <allow roles="algACOMP_user_PAM" />
    <allow roles="algACOMP_user_ANN" />
    <allow roles="algACOMP_user_AAM" />
    <allow roles="algACOMP_user_MWM" /> 
    <allow roles="algACOMP_user_GIM" />
    <deny users="*" />      
  </authorization> 
  </system.web>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

  <system.serviceModel>
    <bindings>
    <basicHttpBinding>
    <binding name="BasicHttpBinding_IAcompService1" closeTimeout="00:01:00"
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
      allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
      maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
      messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
      useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None"
          realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
        </security>
      </binding>
   </basicHttpBinding>
  </bindings>

    <client>
        <endpoint address="http://63.236.108.91/aCompService.svc" binding="basicHttpBinding"
    bindingConfiguration="BasicHttpBinding_IAcompService1" contract="aComp_ServiceReference.IAcompService"
    name="BasicHttpBinding_IAcompService1" />
    </client>
  </system.serviceModel>
  

Любые предложения будут одобрены!
Спасибо, что посмотрели!

Ответ №1:

Ошибка 500.24.50 возникает из-за ASP.NET Интегрированный режим не может олицетворять идентификатор запроса на этапах конвейера BeginRequest и AuthenticateRequest. выдается ошибка 500.24, если ваше приложение запущено в интегрированном режиме, для validateIntegratedModeConfiguration не объявлено или не установлено значение true, а для вашего приложения для identity impersonate установлено значение true.

Обходной путь

A. Если ваше приложение не использует олицетворение запрашивающего пользователя на этапах BeginRequest и AuthenticateRequest (единственные этапы, на которых олицетворение невозможно в интегрированном режиме), проигнорируйте эту ошибку, добавив следующее в web.config вашего приложения:

   <system.webServer>
          <validation validateIntegratedModeConfiguration="false" />
  </system.webServer>
  

B. Если ваше приложение действительно использует олицетворение в BeginRequest и AuthenticateRequest или вы не уверены, перейдите в классический режим.

C. удалить из web.config, который в любом случае не будет эффективен в интегрированном режиме

Подробнее об основных изменениях в IIS 7 читайте на LEARN.IIS.NET

Ответ №2:

Обновить:

Еще немного покопался, и у вас действительно неправильно настроена служба. В этой статье MSDN объясняется, как настроить базовую привязку HttpBinding для проверки подлинности Windows. В принципе, элемент BasicHttpBinding должен выглядеть следующим образом:

   <basicHttpBinding>
    <binding name="BasicHttpEndpointBinding">
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Windows" />
      </security>
    </binding>
  </basicHttpBinding>
  

Оригинальный ответ:

Ниже приведено то, что можно попробовать из информации в этой статье.Поскольку ваша служба использует олицетворение для авторизации, похоже, вам нужно будет использовать ASP.NET конфигурация конвейера в классическом режиме AppPool для этой службы. Возможно, вы захотите изучить, как олицетворение поддерживается в новом конвейере интегрированного режима, и понять, почему ваша служба не соответствует ему, поскольку предпочтителен интегрированный режим.

Вы получите сообщение об ошибке 500 — Internal Server. Это ошибка HTTP 500.24: An ASP.NET обнаружена настройка, которая не применяется в режиме интегрированного управляемого конвейера. Это происходит потому, что ASP.NET Интегрированный режим не может олицетворять идентификатор запроса на этапах конвейера BeginRequest и AuthenticateRequest. Обходной путь

B. Если ваше приложение действительно использует олицетворение в BeginRequest и AuthenticateRequest или вы не уверены, перейдите в классический режим.

Комментарии:

1. @sixto saez, спасибо за ваш ответ! Чем это отличается от того, что у меня есть? У меня есть имя привязки, объявленное в <BasicHttpBinding>, как и у вас, но имя привязки отличается, и я объявляю веб-службу. При просмотре полного кода, нужно ли мне использовать <services>, <identity> и дважды объявлять адрес конечной точки?

2. Я вижу, что отличается следующее: <режим безопасности =»TransportCredentialOnly»> <транспортный клиентCredentialType=»Windows» /> . Раньше у меня был <режим безопасности = «Нет»> <транспортный клиентCredentialType=»Нет» proxyCredentialType = «Нет» realm =»» />

3. У вас есть элемент безопасности mode = «None» и элемент транспорта clientCredentialType=»None» в базовом элементе HttpBinding. Они должны быть установлены с использованием элемента безопасности mode=»TransportCredentialOnly» и транспортного элемента clientCredentialType=»Windows».

4. @Sixto Saez, почему всплывает окно для аутентификации? это должно быть автоматическим и не требовать от меня ввода информации о моем объявлении, поскольку я уже вошел в Windows. Как мне предотвратить это?

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

Ответ №3:

Важно: Убедитесь, что вы установили ASP.NET на вашем компьютере; если нет или есть сомнения, выполните следующую команду:

 > c:WindowsMicrosoft.NETFrameworkvX.X.XXXXXaspnet_regiis.exe /i