Только доступ к сеансу в сеансе веб-службы?
У нас есть веб-служба .net asmx, которая вызывается из javascript (с использованием ASP.Net AJAX) и требует доступа к сеансу.
[WebMethod(true)]
public string DoSomethingOnTheServer() { }
Мы столкнулись с проблемой блокировки сессии по запросу чтения/записи. Есть ли способ маркировать метод веб-службы, требующий доступа только на чтение к сеансу?
Спасибо!
Ответы
Ответ 1
Это действительно старый поток, но я наткнулся на него в поисках ответа на тот же вопрос.
Я нашел ответ еще где, и оставит его здесь для других интернетов на моем месте:
В Global.asax вы можете указать для каждого запроса, какой доступ должен иметь запрос к объекту сеанса, и тем самым блокировать его или нет.
private void Application_BeginRequest(object sender, EventArgs e)
{
// This will set the session to read only for asmx services
// This will make the asmx services non blocking for other requests as it doesnt lock the session object
if (Context.Request.Path.Contains(".asmx/"))
{
Context.SetSessionStateBehavior(SessionStateBehavior.ReadOnly);
}
}
Таким образом, службы asmx всегда имеют доступ только для чтения к сеансу и не будут блокировать другие запросы
Ответ 2
Эта http://msdn.microsoft.com/en-us/library/aa480509.aspx страница, кажется, предполагает, что ответ "нет" - вы не можете пометить WebSerivce как имеющий EnableSessionState=ReadOnly
.
Если вы выполняете одновременные вызовы веб-службы из одного и того же процесса, запросы будут сериализованы на сервере, так что только один будет выполняться одновременно. В отличие от страниц .ASPX, которые поддерживают доступ только для чтения к объекту HttpSessionState, который позволяет одновременно обрабатывать несколько запросов, в веб-службах ASP.NET такой возможности нет. Все вызовы веб-методов с включенными сеансами имеют доступ для чтения/записи и будут сериализованы в каждом сеансе.
Предупреждение: эта статья старая (2002).
Ответ 3
В соответствии с документацией MSDN атрибута WebMethod существует несколько возможных свойств, поэтому я не уверен, что означает истинное значение в вашем атрибуте WebMethod.
Вы пробовали:
[WebMethod(EnableSession=true)]
В соответствии с этот документ, который должен предоставить вам полный доступ к сеансу.