2012-06-05 3 views
3

У меня есть сторонняя сторона ASP.Net, использующая Microsoft Identity Model и WIF для пассивной федеративной идентификации. Веб-приложение отлично работает в IIS 7 в составе интегрированного пула приложений .Net 4. Но когда я переключаю его на пул приложений .Net 4 classic, он терпит неудачу и дает мне следующую ошибку. Как это можно зафиксировать?Настройка федеративной пассивной партии поддержки для ошибки режима классического режима IIS 7 (не удалось выполнить URL)

Сведения об исключении: System.Web.HttpException: Не удалось выполнить URL.

Трассировка стека:

[HttpException (0x80004005):. Не удалось выполнить URL] System.Web.Hosting.ISAPIWorkerRequestInProcForIIS6.BeginExecuteUrl (String URL, метод String, String childHeaders, булевы sendHeaders, Boolean addUserIndo , Токен IntPtr, String name, String authType, Byte [] entity, AsyncCallback cb, состояние объекта) +4040320 System.Web.HttpResponse.BeginExecuteUrlForEntireResponse (String pathOverride, NameValueCollection requestHeaders, AsyncCallback cb, состояние объекта) +590 System.Web .DefaultHttpHandler.BeginProcessRequest (контекст HttpContext, обратный вызов AsyncCallback, состояние объекта) +286 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +405 System.Web.HttpApplication.ExecuteStep (IExecutionStep шаг, булева & completedSynchronously) +375

Редактировать

В этом ошибка возникает, когда я просматриваю сайт без указания страницы. Пример:

1 - http://www.relyingparty3.com вызывает ошибки

2 - http://www.relyingparty3.com/Default.aspx работает отлично

ответ

2

Я нашел решение в следующем MSDN теме форума. Заслуга пользователей «paullem» (объясняя причину отказа) и «Алекс Станкевич» (для получения кода крепежного доступного):

http://social.msdn.microsoft.com/Forums/en/Geneva/thread/43392dc5-e764-4027-8de5-1638a4c17540

Так, чтобы решить эту проблему, я создал новый класс с следующий код:

using System; 
using System.Web; 
using System.Security.Principal; 
using System.Threading; 
using Microsoft.IdentityModel.Claims; 
using Microsoft.IdentityModel.Web; 

namespace TestApp.Code 
{ 
    public class IIS6SessionAuthenticationModule : SessionAuthenticationModule 
    { 
     protected override void OnPostAuthenticateRequest(object sender, EventArgs e) 
     { 
      if (!(HttpContext.Current.User is IClaimsPrincipal)) 
      { 
       IClaimsPrincipal incomingPrincipal = ClaimsPrincipal.CreateFromHttpContext(HttpContext.Current); 
       ClaimsAuthenticationManager manager = base.ServiceConfiguration.ClaimsAuthenticationManager; 

       if (((manager != null) && (incomingPrincipal != null)) && (incomingPrincipal.Identity != null)) 
       { 
        incomingPrincipal = manager.Authenticate(HttpContext.Current.Request.Url.AbsoluteUri, incomingPrincipal); 
       } 

       if (incomingPrincipal.Identity.IsAuthenticated) 
       { 
        HttpContext.Current.User = incomingPrincipal; 
        Thread.CurrentPrincipal = incomingPrincipal; 
       } 
       else 
       { 
        HttpContext.Current.User = new GenericPrincipal(new GenericIdentity(string.Empty), new string[] { }); 
        Thread.CurrentPrincipal = HttpContext.Current.User; 
       } 
      } 
      else 
      { 
       if (string.IsNullOrEmpty(HttpContext.Current.User.Identity.Name)) 
       { 
        HttpContext.Current.User = new GenericPrincipal(new GenericIdentity(string.Empty), new string[] { }); 
        Thread.CurrentPrincipal = HttpContext.Current.User; 
       } 
      } 
     } 
    } 
} 

затем я добавил следующую запись в "HttpModules" из "system.web" в "web.config", после "WSFederationAuthenticationModule" и "SessionAuthenticationModule":

<add name="IIS6SessionAuthenticationModule" type="TestApp.Code.IIS6SessionAuthenticationModule, TestApp" /> 
0

Eсть проблема с завершающими косыми чертами.

Что произойдет, если вы набираете: http://www.relyingparty3.com/

(Примечание слэш)

+0

Когда я набираю http://www.relyingparty3.com/, он меняется на http://www.relyingparty3.com, и я получаю ту же ошибку. –

Смежные вопросы