SharePoint 2007 の機能をサイトの Application_Start にフックするにはどうすればよいでしょうか?

StackOverflow https://stackoverflow.com/questions/122205

質問

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

ありがとう!

役に立ちましたか?

解決

これは実際には可能ですが、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) を使用しました。

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

他のヒント

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

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

オイシン

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top