3

パッシブ フェデレーション ID に Microsoft ID モデルと WIF を使用する ASP.Net Relying Party があります。Web アプリケーションは、IIS 7 で .Net 4 統合パイプライン アプリケーション プールの下で正常に動作します。しかし、.Net 4 クラシック パイプライン アプリケーション プールに切り替えると失敗し、次のエラーが表示されます。これはどのように修正できますか?

例外の詳細: System.Web.HttpException: URL の実行に失敗しました。

スタックトレース:

[HttpException (0x80004005): URL の実行に失敗しました。] System.Web.Hosting.ISAPIWorkerRequestInProcForIIS6.BeginExecuteUrl(String url, String method, String childHeaders, Boolean sendHeaders, Boolean addUserIndo, IntPtr token, String name, String authType, Byte[] entity 、AsyncCallback cb、オブジェクト状態) +4040320 System.Web.HttpResponse.BeginExecuteUrlForEntireResponse(文字列 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 step, Boolean& completedSynchronously) +375

編集

このエラーは、ページを指定せずに Web サイトを参照すると発生します。例:

1 - http://www.relyingparty3.comでエラーが発生する

2 - http://www.relyingparty3.com/Default.aspxは正常に動作します

4

2 に答える 2

2

次の MSDN フォーラム スレッドで解決策を見つけました。ユーザー "paullem" (失敗の理由を説明) と "Alex Stankiewicz" (修正コードを利用できるようにするため) に功績が認められます。

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;
                }
            }
        }
    }
}

次に、「web.config」の「system.web」の「httpModules」に、「WSFederationAuthenticationModule」と「SessionAuthenticationModule」の後に次のエントリを追加しました。

<add name="IIS6SessionAuthenticationModule" type="TestApp.Code.IIS6SessionAuthenticationModule, TestApp" />
于 2012-06-06T20:56:59.343 に答える
0

末尾のスラッシュに問題があります。

次のように入力するとどうなりますか: http://www.relyingparty3.com/

(末尾のスラッシュに注意してください)

于 2012-06-05T22:53:53.960 に答える