2015-05-17 80 views
28

我正在使用使用Ajax(json)/ Webmethod函數的頁面測試Azure服務器。Webmethods with HttpContext.Current.User.Identity.IsAuthenticated在Azure上處於非活動狀態後停止工作

其中一些功能在運行代碼之前檢查HttpContext.Current.User.Identity.IsAuthenticated。不幸的是,如果用戶登錄並且該頁面沒有向服務器發送完整的回發請求,則只有那些檢查HttpContext.Current.User.Identity.IsAuthenticated幾秒鐘後才能完全停止運行的web方法功能不會給出任何錯誤。他們甚至不運行else代碼塊(見下文)。

我已經測試了本地服務器上的這些頁面,即使在長時間不活動之後,一切都正常運行。這裏是一個WebMethod

[WebMethod] 
public static string serviceMenu(int IDservice) 
{ 
     StringBuilder SBphotoMenu = new StringBuilder();    
     if (HttpContext.Current.User.Identity.IsAuthenticated) 
     { 
      // Do stuff 
     } 
     else 
     { 
      // Do other stuff 
     } 

     return SBphotoMenu.ToString(); 
} 

我打電話的WebMethod如下的例子:

function serviceMenu(IDservice) { 
$.ajax({ 
    type: "POST", 
    url: "/UserControls/serviceMenu", 
    data: "{ IDservice: " + IDservice }", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (data) { 
     // Do Stuff   
    } 
}) 
} 

只有當用戶登錄出現此現象的現在,如果用戶沒有登錄那麼即使在Azure上,所有功能也能正常工作。

事實上,當webmethods停止運行並刷新頁面時,用戶仍然登錄並且webmethods會再次開始運行,但只有幾分鐘,然後再次發生相同的行爲。

怎麼回事?

+0

是否有任何特殊的原因,你把用戶身份驗證的方法,而不是在Global.asax或一些基類? –

+0

我正在檢查用戶是否已通過身份驗證,以便在這些webmethods中相應地創建字符串 – Gloria

+0

因此,停止工作意味着什麼?你的意思是,當身份驗證停止工作時,它總是進入''''''''邏輯。 –

回答

0

該問題是由會話變量造成的,而非驗證。實際上,使用默認的「inProc」方法,Azure中的ASP.NET應用程序不會爲會話狀態服務。 Azure使用其他方法,其中一些方法成本高昂:表存儲,SQL Azure或Windows Azure緩存。

相關問題