2008-09-23 100 views

回答

13

其實,這是可能的,但它不涉及在Global.asax文件。

許多微軟的例子都通過Global.asax演示了接線代碼,但這涉及到SharePoint時不是最佳實踐方法。理想情況下,您的代碼應該打包爲功能並通過WSP進行部署(如您所知)。

關鍵在於將有問題的代碼實現爲HttpModule(即實現IHttpModule接口的類型)並將其連接到爲您的SharePoint應用程序提供服務的ASP.NET管道中。粗略地說,這些步驟是:

  1. 創建一個實現IHttpModule接口的類。
  2. 在你的HttpModule中實現Init方法;當HttpApplication(在這種情況下,SPHttpApplication)被設置時,這被調用,並且它給你一個機會來執行處理,其他管道事件的接線事件委託等。
  3. 創建一個SPFeatureReceiver,它將添加並分別在激活和取消激活時從目標web.config文件中刪除HttpModule。這是通過使用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

結果:可處理應用程序啓動並可通過功能部署的類。沒有手動文件黑客要求。

我已經在很多場景中成功地使用了它 - 最近有一個自定義緩存提供程序(IVaryByCustomHandler)需要在SPHttpApplication啓動時自行註冊回調。

雖然你的問題有點老,我希望這有助於!

3

我的直覺就是不可能。 Application_Start由運行時在asp.net引擎啓動時調用,所以很可能不會有任何方式在修改Global.asax之外掛鉤處理程序 - 例如,該鉤子必須是聲明性的並且是持久的,因爲它必須在應用程序停止/卸載時倖存下來。所以,如果您必須寫入global.asax,我想您可以編寫一個Feature EventReceiver來執行修改。

除此之外,你可以給出更多的細節,爲什麼?也許還有其他的攻擊角度。即時修改global.asax的想法讓​​我感覺不舒服。那不好。

[287]莪

相關問題