5

機能を開発するときに、SharePoint 2007 サイトの Application_Start にフックする良い方法があるかどうか疑問に思っていました。サイト ルートにある Global.asax ファイルを直接編集できることはわかっていますが、この機能と共に展開されるようにする方法はありますか?

ありがとう!

4

2 に答える 2

13

これは実際には可能ですが、Global.asaxファイルは含まれません。

Microsoftの例の多くは、Global.asaxを介した配線コードを示していますが、SharePointに関しては、これはベストプラクティスのアプローチではありません。理想的には、コードを機能としてパッケージ化し、WSPを介してデプロイする必要があります(すでにご存知のとおり)。

重要なのは、問題のコードをHttpModule(つまり、IHttpModuleインターフェイスを実装するタイプ)として実装し、SharePointアプリケーションにサービスを提供するASP.NETパイプラインに接続することです。大まかに言えば、次の手順です。

  1. IHttpModuleインターフェイスを実装するクラスを作成します。
  2. HttpModuleにInitメソッドを実装します。これは、HttpApplication(この場合はSPHttpApplication)がセットアップされたときに呼び出され、処理、他のパイプラインイベントのイベントデリゲートのワイヤリングなどを実行する機会を提供します。
  3. アクティブ化と非アクティブ化のそれぞれで、ターゲットweb.configファイルにHttpModuleを追加および削除するSPFeatureReceiverを作成します。これは、SPWebConfigModificationタイプを使用して実行され、ターゲットweb.configファイルの<httpModules>ノードを更新します。
  4. すべてを機能としてパッケージ化し、WSPを介して展開します。

HttpModule開発の詳細については、 http://msdn.microsoft.com/en-us/library/ms227673.aspxを参照してください。SPWebConfigModificationタイプの詳細については、 http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebconfigmodification.aspxを参照してください

結果:アプリケーションの起動を処理でき、Featureを介してデプロイ可能なクラス。手動でファイルをハッキングする必要はありません。

私はこれを多くのシナリオでうまく使用しました-最近では、起動時にSPHttpApplicationでコールバックを登録する必要があるカスタムキャッシュプロバイダー(IVaryByCustomHandler)を使用しました。

あなたの質問は少し古いですが、これがお役に立てば幸いです。

于 2009-06-25T02:31:07.560 に答える
3

これについての私の直感は、それが不可能になるだろうということです。Application_Startは、asp.netエンジンの起動時にランタイムによって呼び出されるため、Global.asaxを変更する以外にハンドラーをフックする方法はほとんどありません。たとえば、フックは宣言型で永続的である必要があります。アプリケーションの停止/アンロード後も存続します。したがって、global.asaxに書き込む必要がある場合は、変更を実行するためにFeatureEventReceiverを作成できると思います。

それはさておき、その理由について詳しく教えていただけますか?おそらく他の迎え角があります。その場でglobal.asaxを変更するという考えは、私を気分が悪くさせます。それは良いことではありません。

オシーン

于 2008-09-24T15:48:00.290 に答える