SharePoint 2007 の機能をサイトの Application_Start にフックするにはどうすればよいでしょうか?
-
02-07-2019 - |
質問
機能を開発するときに、SharePoint 2007 サイトの Application_Start にフックする良い方法はないかと考えていました。サイトのルートにある Global.asax ファイルを直接編集できることはわかっていますが、機能とともに展開されるようにこれを行う方法はありますか?
ありがとう!
解決
これは実際には可能ですが、Global.asax ファイルは必要ありません。
Microsoft の例の多くは、Global.asax 経由でコードを接続する方法を示していますが、これは SharePoint に関してはベスト プラクティス アプローチではありません。理想的には、コードはフィーチャーとしてパッケージ化され、WSP 経由でデプロイされる必要があります (すでにご存知のとおり)。
重要なのは、問題のコードを HttpModule (つまり、IHttpModule インターフェイスを実装する型) として実装し、それを SharePoint アプリケーションにサービスを提供する ASP.NET パイプラインに接続することにあります。大まかに言うと、次のような手順になります。
- IHttpModule インターフェイスを実装するクラスを作成します。
- HttpModule に Init メソッドを実装します。これは、HttpApplication (この場合は SPHttpApplication) がセットアップされるときに呼び出され、処理を実行したり、他のパイプライン イベントのイベント デリゲートを接続したりする機会を与えます。
- アクティブ化時と非アクティブ化時にそれぞれターゲットの web.config ファイルに HttpModule を追加および削除する SPFeatureReceiver を作成します。これは、SPWebConfigModification タイプを使用して実行され、ターゲットの web.config ファイル内の <httpModules> ノードを更新します。
- すべてを機能としてパッケージ化し、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) を使用しました。
あなたの質問は少し古いですが、これがお役に立てば幸いです。
他のヒント
これについての私の直感は、それは不可能だということです。Application_Start は、asp.net エンジンの起動時にランタイムによって呼び出されるため、Global.asax を変更する以外にハンドラーをフックする方法はおそらくありません。フックはアプリケーションの停止/アンロード後も存続する必要があるため、宣言的かつ永続的である必要があります。したがって、global.asax に書き込む必要がある場合は、変更を実行する機能 EventReceiver を作成できると思います。
それはさておき、その理由について詳しく教えてもらえますか?おそらく他の攻撃角度もあるでしょう。その場で global.asax を変更するという考えは、気分が悪くなります。それは良くありません。
オイシン