requests simultanées expirent à partir du même browser

J'ai une situation étrange: si je lance un rapport très lent d'IE et par la suite d'un autre onglet faire plus de requests à la database via l'application asp.net – ils expirent comme si le rapport verrouillé la totalité de DB. Maintenant, si je lance un rapport via Firefox – il est encore lent, mais les requests effectuées via IE sont très bien. Même chose si les browsers sont échangés – comme si je ne pouvais pas lancer de rapport et utiliser mon application depuis le même browser. J'utilise windows auth, sql server express, les services de reporting. Tous les indices de cette étrangeté seraient appréciés.

Les rapports d' édition sont gérés à partir de la même application IIS que celle de l'application principale, c'est juste une page Report.aspx. J'ai aussi vérifié via profiler – aucune nouvelle requête à db n'arrive tant que la requête du rapport est active. Tout est sur le même server

Edit1

Demandes simultanées et état de session

L'access à l'état de session ASP.NET est exclusif par session, ce qui signifie que si deux users différents effectuent des requests simultanées, l'access à chaque session distincte est accordé simultanément. Toutefois, si deux requests simultanées sont effectuées pour la même session (en utilisant la même valeur SessionID), la première request obtient un access exclusif aux informations de session. La deuxième requête s'exécute seulement après que la première requête est terminée. (La deuxième session peut également accéder si le verrou exclusif sur les informations est libéré car la première request dépasse le timeout de locking.) Si la valeur EnableSessionState dans la directive @ Page est définie sur ReadOnly, une request de lecture seule les informations de session n'entraînent pas de verrou exclusif sur datatables de session. Toutefois, les requests en lecture seule pour datatables de session peuvent toujours attendre qu'un verrou défini par une request de lecture-écriture pour datatables de session soit effacé.

Edit2 Résolu le problème en l'ajoutant à 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> 

Où l'user doit être ajouté dans les parameters de security ssrs (j'ai utilisé mon login Windows). Et ReportServerConnection se trouve dans une bibliothèque séparée 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 ssortingng userName = ConfigurationManager.AppSettings ["MyReportViewerUser"]; if (ssortingng.IsNullOrEmpty(userName)) throw new Exception( "Missing user name from Web.config file"); // Password ssortingng password = ConfigurationManager.AppSettings ["MyReportViewerPassword"]; if (ssortingng.IsNullOrEmpty(password)) throw new Exception( "Missing password from Web.config file"); // Domain ssortingng domain = ConfigurationManager.AppSettings ["MyReportViewerDomain"]; if (ssortingng.IsNullOrEmpty(domain)) throw new Exception( "Missing domain from Web.config file"); return new NetworkCredential(userName, password, domain); } } public bool GetFormsCredentials(out Cookie authCookie, out ssortingng userName, out ssortingng password, out ssortingng authority) { authCookie = null; userName = null; password = null; authority = null; // Not using form credentials return false; } public Uri ReportServerUrl { get { ssortingng url = ConfigurationManager.AppSettings[ "MyReportServerUrl"]; if (ssortingng.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<ssortingng> Headers { get { // No custom headers return null; } } } 

Message similaire: ici

vous pourriez rencontrer un problème d'état de session: http://odetocode.com/Blogs/scott/archive/2006/05/21/session-state-uses-a-reader-writer-lock.aspx

vous ne rencontrez pas le problème lorsque vous utilisez deux browsers différents, car ils fonctionnent avec deux cookies de session différents.