我有奇怪的情況:如果我從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
指向正確的方向 – ren