#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