2009-11-23 6 views
7

から、実行時にASPXページをレンダリングは、以下のコードを仮定すると、データベース

注:ASPX文字列自体に、ディスク上の既存のMasterPageへの参照を含めることができます。

私はこれに大きなパフォーマンス上の問題があることを認識していますが、この段階では私はどのようにできるのか知りたいのです。明らかに、私は結果をキャッシュしなければならないでしょう。

ありがとうございました。

+0

答えを楽しみにしています。それが可能ならば驚くべきことだ。良い質問。 –

+0

下記のGonzaloとRexからの入力は正確ですが、新しいVirtualPathProviderサブクラスを実装するには、完全な信頼アクセス権が必要です(またはある時点で)。共有ホスティング環境では実行できない可能性があることに注意してください。 – Chris

+0

はい。完全な信頼は大きな限界です。ミディアムトラストのソリューションは、そうであればもちろん良いでしょう。 –

答えて

9

あなたがダウンしようとしているパスは、本質的にはで、Webサーバーファイルシステム以外のストレージメカニズムからASPXファイルをロードしています。あなたはその一部を実装し始めましたが、実際にはこれを行うためにカスタムHttpHandlerは必要ありません - ASP.NETは、実際のASPXマークアップの他のソースを指定するための既存のメカニズムを持っています。

VirtualPathProviderと呼ばれています。ディスクからファイルをロードする、たとえばSQL Serverから読み込む、または他の意味がある場合は、デフォルトの機能をスワップアウトすることができます。次に、ASP.NETが単独で使用する組み込みのコンパイルとキャッシュを利用できます。

機能のコアはGetFile methodに来て、VirtualFile's Open()

public override VirtualFile GetFile(string virtualPath) 
{ 
    //lookup ASPX markup 
    return new MyVirtualFile(aspxMarkup); 
} 

//... 

public class MyVirtualFile : VirtualFile 
{ 
    private string markup; 

    public MyVirtualFile(string markup) 
    { 
     this.markup = markup; 
    } 

    public override Stream Open() 
    { 
     return new StringReader(this.markup); 
    } 
} 

注意を、今日、完全な信頼を必要としないカスタムVirtualPathProviderを使用しました。しかし、すぐにASP.NET 4.0が利用可能になり、中規模の信頼下でVPPをサポートします。

+0

非常に良い音です!ありがとう。私はASP.NET MVCのサンプルをここで見つけました:http://padcom13.blogspot.com/2009/04/virtualpathprovider-example.html –

+0

aspxページにはコードが含まれているアセンブリが必要です。私たちは何をすることができますか? – Mark

1

VirtualPathProviderのサブクラスを作成して、HostingEnvironment.RegisterVirtualPathProviderを呼び出すことによってHostingEnvironment.VirtualPathProviderとして設定することの1つの方法です。あなたはいくつかの方法をオーバーライドする必要があります。最も重要なものはGetFile()です。ビルドシステムはキャッシュを処理します。

関連する問題