2015-05-26 91 views
1

我有奇怪的情況:如果我從IE瀏覽器,並隨後從另一個選項卡通過asp.net應用程序使更多的數據庫請求啓動非常慢的報告 - 他們超時彷彿報告鎖定整個數據庫。現在,如果我通過Firefox發佈報告 - 它仍然很慢,但通過IE做出的請求沒有問題。如果瀏覽器被交換,同樣的故事 - 就像我無法啓動報告並從同一瀏覽器使用我的應用程序一樣。我使用windows auth,sql server express,報告服務。任何這種奇怪的線索將不勝感激。同時請求超時從同一個瀏覽器

編輯 報告是從主應用程序的同一個IIS應用程序處理的,它只是一些Report.aspx頁面。 另外我已經通過探查檢查 - 沒有新的請求DB只要報告的要求是積極的到來。一切都在同一臺服務器上

EDIT1

併發請求和會話狀態

訪問ASP.NET會話狀態是每個會話,這意味着 ,如果兩個不同的用戶同時做獨家請求,訪問每個 單獨的會話同時授予。但是,如果兩個併發 請求爲同一會議上提出的(通過使用相同的SessionID 值),第一個請求獲取到會話 信息獨佔訪問。第二個請求僅在第一個請求 完成後才執行。 (第二次會議也可以,因爲第一個請求超過 鎖定超時可以訪問,如果對信息的獨佔 鎖被釋放。)如果在@ Page中的EnableSessionState值 指令設置爲只讀,該請求只讀會話 信息不會導致對會話數據的獨佔鎖定。 但是,只讀會話數據的請求可能仍需等待 一個鎖由會話數據清除讀寫請求設置。

EDIT2 加入這個問題解決了到Web.config中

<appSettings> 
<add key="ReportViewerServerConnection" value="AS.Web.Providers.ReportServerConnection, AS.Web.Common" /> 

<add key="MyReportServerUrl" value="http://reportserver/reportserver" /> 
<add key="MyReportViewerUser" value="user" /> 
<add key="MyReportViewerPassword" value="password" /> 
<add key="MyReportViewerDomain" value="domain" />--> 
</appSettings> 

如果用戶應SSRS安全設置中添加(我用我的Windows登錄)。 而ReportServerConnection是獨立的庫AS.Web.Common:

public sealed class ReportServerConnection : IReportServerConnection2 
{ 
    public WindowsIdentity ImpersonationUser 
    { 
     get 
     { 
      // Use the default Windows user. Credentials will be 
      // provided by the NetworkCredentials property. 
      return null; 
     } 
    } 

    public ICredentials NetworkCredentials 
    { 
     get 
     { 
      // Read the user information from the web.config file. 
      // By reading the information on demand instead of 
      // storing it, the credentials will not be stored in 
      // session, reducing the vulnerable surface area to the 
      // web.config file, which can be secured with an ACL. 

      // User name 
      string userName = 
       ConfigurationManager.AppSettings 
        ["MyReportViewerUser"]; 

      if (string.IsNullOrEmpty(userName)) 
       throw new Exception(
        "Missing user name from Web.config file"); 

      // Password 
      string password = 
       ConfigurationManager.AppSettings 
        ["MyReportViewerPassword"]; 

      if (string.IsNullOrEmpty(password)) 
       throw new Exception(
        "Missing password from Web.config file"); 

      // Domain 
      string domain = 
       ConfigurationManager.AppSettings 
        ["MyReportViewerDomain"]; 

      if (string.IsNullOrEmpty(domain)) 
       throw new Exception(
        "Missing domain from Web.config file"); 

      return new NetworkCredential(userName, password, domain); 
     } 
    } 

    public bool GetFormsCredentials(out Cookie authCookie, 
       out string userName, out string password, 
       out string authority) 
    { 
     authCookie = null; 
     userName = null; 
     password = null; 
     authority = null; 

     // Not using form credentials 
     return false; 
    } 

    public Uri ReportServerUrl 
    { 
     get 
     { 
      string url = 
       ConfigurationManager.AppSettings[ 
        "MyReportServerUrl"]; 

      if (string.IsNullOrEmpty(url)) 
       throw new Exception(
        "Missing url from the Web.config file"); 

      return new Uri(url); 
     } 
    } 

    public int Timeout 
    { 
     get 
     { 
      return 60000; // 60 seconds 
     } 
    } 

    public IEnumerable<Cookie> Cookies 
    { 
     get 
     { 
      // No custom cookies 
      return null; 
     } 
    } 

    public IEnumerable<string> Headers 
    { 
     get 
     { 
      // No custom headers 
      return null; 
     } 
    } 
} 

類似的帖子:here

回答

相關問題