私たちの会社は、サードパーティが独自のページとモジュールを追加できるように、Web アプリケーションのコンパイル済みバージョンをサードパーティに提供したいと考えています。これを達成しようとして、これまでに次のことを行いました。
- メインの Web アプリを Web 配置プロジェクトとしてコンパイルしました
- 上記の手順 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.Form
Page.Controls
私は何を間違っていますか?これを達成するために別の道をたどるべきですか?