2

私たちの会社は、サードパーティが独自のページとモジュールを追加できるように、Web アプリケーションのコンパイル済みバージョンをサードパーティに提供したいと考えています。これを達成しようとして、これまでに次のことを行いました。

  1. メインの Web アプリを Web 配置プロジェクトとしてコンパイルしました
  2. 上記の手順 1 で生成された DLL を参照する POC Web アプリを作成しました。

次に、次の静的メソッドをメインの Web アプリに追加しました。これにより、事前にコンパイルされた aspx ページへの要求が処理されることが期待されます。

public static bool TryProcessRequest(HttpContext context)
{
    string rawUrl = context.Request.RawUrl;
    int aspxIdx = rawUrl.IndexOf(".aspx");
    if (aspxIdx > 0)
    {
        string aspxPagePath = rawUrl.Substring(0, aspxIdx + 5);

        string aspxPageClassName = aspxPagePath.Substring(1).Replace('/','_').Replace(".aspx","");
        Assembly website = Assembly.GetAssembly(typeof(MCLLogin));
        Type pageClass = website.GetType(aspxPageClassName);
        ConstructorInfo ctor = pageClass.GetConstructor(new Type[] { });
        IHttpHandler pageObj = (IHttpHandler)ctor.Invoke(new object[] { });

        context.Server.Execute(pageObj, context.Response.Output, false);

        //alternative: invoking the page's ProcessRequest method - same results
        //System.Reflection.MethodInfo method = pageClass.GetMethod("ProcessRequest");
        //method.Invoke(pageObj, new object[] { context });

        return true;
    }
    return false; //not handled
}

次に、メインの Web アプリでリクエストを処理したいときはいつでも、POC Web アプリのProcessRequest()メソッドでこのメソッドを呼び出します。HttpHandlerこのコードは実際に正しいクラスのページを正常にインスタンス化し、リクエストの処理を開始します。

問題: is nullPage_PreLoadであるため、ハンドラーの コードが例外をスローします。コレクションがであることもわかりました。Page.FormPage.Controls

私は何を間違っていますか?これを達成するために別の道をたどるべきですか?

4

0 に答える 0