2012-10-17 26 views
1

我正在開發sharepoint 2010 web應用程序。我想通過使用從SPHttpApplication繼承的Global.asax以經典的asp.net方式處理一些Applicaton事件(Begin_Request,End_Request,Application_Start)。實施IHttpModule類事件不發射,SharePoint 2010問題

我發現 two way 來區分。

第一個建議在Global類中重載SPHttpApplication。好主意,但不適合我,因爲我的應用程序被部署到另一個主站點的子站點。如果有一種方法可以解決這個問題,那將是一個很好的解決方案!

第二個建議實現IHttpModule接口並註冊來自HttpApplication上下文變量的事件。它適用於我,我創建了一個實現此接口的類的類庫項目。我也是在我的web.config文件中添加特殊的記錄:

<httpModules> 
    <add name="DSModule" type="Artec.DS.HttpContext.DSModule, DSModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31a3567341f39f94"/> 
</httpModules> 

其中「Artec.DS.HttpContext」爲項目名稱和DSModule是一個類名。 畢竟,當我開始調試時,不會調用「Init()」方法。

UPDATE

namespace Artec.DS.HttpContext 
{ 
    public class DSModule : IHttpModule 
    { 
     public void Dispose() 
     { 
      throw new NotImplementedException(); 
     } 

     public void Init(HttpApplication context) 
     { 
      System.Diagnostics.Debugger.Launch(); 

      ApplicationVariables.AppPath = context.Server.MapPath("/"); 
      NhibernateManager.Init(); 
      NavigationManager.Init(); 
     } 
    } 
} 

我所有的web.config首先有錯誤的 「類型」 屬性。我對類名而不是程序集名稱感到困惑。所以合式標籤如下:

<add name="DSModule" type="Artec.DS.HttpContext.DSModule, Artec.DS.HttpContext, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31a3567341f39f94" /> 

的web.config system.webServer修改後/模塊(感謝CBono)的init()被調用,這是我最初的問題的答案。

但現在我得到錯誤:「System.Web.HttpException:服務器操作在此上下文中不可用。」試圖映射服務器路徑時:

context.Server.MapPath("/") 
+1

你應該把它分成一個單獨的問題。 – CBono

回答

1

您列出的web.config文件條目是適當的,如果你的IIS實例是6版本,或者如果你在7版本經典模式下運行。

嘗試也增加了這你的web.config覆蓋IIS 7集成模式(這也許你正在使用):

<configuration> 
    <system.webServer> 
    <modules> 
     <add name="DSModule" type="Artec.DS.HttpContext.DSModule, DSModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31a3567341f39f94"/> 
    </modules> 
    </system.webServer> 
</configuration> 

這是完全沒關係讓你的HTTP模塊兩節註冊。

+0

謝謝!你的建議是正確的!但我有另一個問題「服務器操作在這種情況下不可用」。我還發布了代碼。 – kokosda