У меня странная ситуация: если я запускаю очень медленный отчет от 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
указал на правильное направление – ren