2016-04-21 37 views
1

嗨我正在使用HttpModule來調用WebAPI。 目前,該解決方案在系統本地工作,但一旦我發表在服務器代碼,它不能使API call.Here是示例代碼:使用IHTTP模塊的Web Api調用

public class AppModule: IHttpModule 
{ 
    public void Init(HttpApplication httpApp) 
    { 
     httpApp.BeginRequest += OnBeginRequest; 
     httpApp.EndRequest += OnEndRequest; 
     httpApp.PreSendRequestHeaders += OnHeaderSent; 
    } 
     public void OnBeginRequest(Object sender, EventArgs e) 
      { 
       try 
       { 
        var httpApp = (HttpApplication)sender; 
        if (httpApp.Request.Path.StartsWith("/media/")) return; 
        string a = httpApp.Request.ServerVariables["ID"]; 
        if (String.IsNullOrEmpty(a)) 
        { 
         a = System.Configuration.ConfigurationManager.AppSettings["ID"]; 
        } 
        var absolutepath = httpApp.Request.Url.AbsolutePath; 
        var values = new Dictionary<string, object> 
        { 
         { "ID", a }, 
         { "Browser",httpApp.Request.Browser["Type"] }, 
         { "Url",httpApp.Request.Url.Scheme + "://" + httpApp.Request.Url.Authority + absolutepath}, 
         { "OperatingSys",httpApp.Request.Headers["User-Agent"] }, 
         { "IPAddss",httpApp.Request.UserHostAddress }, 
         { "LDate",System.DateTime.Now.ToString() }, 
        }; 

         var serializer = new JavaScriptSerializer(); 
         var appData = serializer.Deserialize<DataVO>(serializer.Serialize(values)); 
         AppModuleVO objAppModuleVO = new AppModuleVO(); 
         //AppModuleVo has all the properties. 
         objAppModuleVO.WebUrl = System.Configuration.ConfigurationManager.AppSettings["APIURL"] + MethodCall; 
         objAppModuleVO.objDataVo = appData; 
         ThreadPool.QueueUserWorkItem(new WaitCallback(HandlePostRequest), objAppModuleVO); 

       } 
       catch (Exception ex) 
       { 

       } 
      } 
} 

我已經註冊在web.config中的相同因爲

<system.web> 
    <httpModules> 
     <add name="AppModule" type="Fighter.Modules.AppModule"/> 
    </httpModules> 
</system.web> 
<system.webServer> 
    <modules> 
     <add name="AppModule" type="Fighter.Modules.AppModule"/> 
    </modules> 
</system.webServer> 

我不確定在服務器中發佈代碼後是否需要在IIS服務器上進行任何更改或註冊。 注:我也在服務器上部署了API,並提供了正確的路徑,因爲其他方法可以調用排除的相同API。請幫助。這個問題似乎是因爲IIS目前我正在使用管理流水線模式下的IIS 7.0作爲CLASSIC。有關此問題的任何解決方法。

+0

什麼失敗?有一個問題。它是否在那裏? – Asken

+0

@Asken當我在本地運行解決方案時,它的工作原理是在服務器中發佈代碼後出現問題。 –

+0

需要更多數據...它可以是任何東西。你必須看看iis日誌。你也可以嘗試使一個死的簡單模塊返回類似字符串的東西,看它是否工作。如果打電話給外部網站,您可能需要確保您有權這樣做。如果你可以控制服務器,你可以嘗試設置''。 – Asken

回答

0

要長,評論等等...在你的web.config試試這個:

.... 
<system.webServer> 
    <modules> 
     <add name="AppModule" type="Fighter.Modules.AppModule"/> 
    </modules> 
    <validation validateIntegratedModeConfiguration="false" /> 
</system.webServer> 

說了這麼多,你應該考慮使用IntegratedMode。

+0

您確定它會在經典模式下工作嗎?因爲無法將服務器配置更改爲集成,因爲這部分項目可能會影響其他依賴項。 –

+0

沒有什麼是肯定的,但至少集成的驗證將被刪除。另一種選擇是使用集成創建一個新的應用程序池。如果您然後將其用於您的應用程序,則不會干擾其他應用程序。他們將是非常獨立的,可以停下來,開始和回收,無論彼此。 – Asken