2015-05-26 3 views
1

У меня странная ситуация: если я запускаю очень медленный отчет от IE, а затем с другой вкладки делаю больше запросов к базе данных через приложение asp.net - они тайм-аут, как будто отчет заблокировал весь db , Теперь, если я запускаю отчет через firefox - он все еще медленный, но запросы, сделанные через IE, прекрасны. Такая же история, если браузеры меняются местами - как будто я не могу запустить отчет и использовать свое приложение из того же браузера. Я использую windows auth, sql server express, службы отчетов. Любые подсказки к этой странности были бы оценены.одновременный запрос времени из того же браузера

Редактировать Отчеты обрабатываются из одного и того же приложения IIS в качестве основного приложения, это всего лишь часть страницы Report.aspx. Также я проверил через профайлер - никаких новых запросов на db не поступают, пока запрос отчета активен. Все на том же сервере

Edit1

одновременных запросов и состояния сеанса

Доступ к ASP.NET состояние сеанса исключительно на сессии, что означает что, если два пользователя одновременно делают запросы, доступ к каждому отдельному сеансу предоставляется одновременно. Однако, если два одинаковых запроса сделаны для одного и того же сеанса (с использованием того же значения SessionID ), первый запрос получает эксклюзивный доступ к информации сеанса . Второй запрос выполняется только после завершения первого запроса . (Второй сеанс также может получить доступ, если исключительная блокировка освобождается, поскольку первый запрос превышает тайм-аут блокировки .) Если значение EnableSessionState в директиве @ Page установлено на ReadOnly, запрос на только для чтения информация не приводит к исключительной блокировке данных сеанса. Однако запросы на чтение только для данных сеанса могут по-прежнему ждать для блокировки, установленной запросом на чтение и запись для очистки данных сеанса.

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 безопасности (я использовал мои регистрационные окна). И 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

ответ

1

вы могли бы работать в государственной сессии вопрос: http://odetocode.com/Blogs/scott/archive/2006/05/21/session-state-uses-a-reader-writer-lock.aspx

вы не впадающих в при использовании двух разных браузеров, поскольку они работают с двумя различными файлами сеансов.

+0

указал на правильное направление – ren

Смежные вопросы