Доступ только для чтения к сеансу в вызове веб-службы? - PullRequest
10 голосов
/ 01 июня 2009

У нас есть веб-сервис .net asmx, который вызывается из javascript (с использованием ASP.Net AJAX) и требует доступа к Session.

[WebMethod(true)]
public string DoSomethingOnTheServer() { }

Мы столкнулись с проблемой блокировки сеанса по запросу на чтение / запись. Есть ли способ пометить метод веб-службы как требующий доступа только для чтения к сеансу?

Спасибо!

Ответы [ 3 ]

7 голосов
/ 29 июня 2017

Это действительно старая ветка, но я наткнулся на нее в поиске ответа на тот же вопрос.

Я нашел ответ еще где, и оставлю его здесь для других интернетов вместо меня:

В 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 всегда имеют доступ только для чтения к сеансу и не блокируют другие запросы

4 голосов
/ 06 октября 2010

Эта страница http://msdn.microsoft.com/en-us/library/aa480509.aspx, по-видимому, предполагает, что ответ "нет" - вы не можете пометить WebSerivce как имеющий EnableSessionState=ReadOnly.

Если вы выполняете одновременные вызовы веб-службы из одного и того же процесса, запросы будут сериализованы на сервере, так что в каждый момент времени будет выполняться только один. В отличие от страниц .ASPX, которые поддерживают доступ только для чтения к объекту HttpSessionState, который позволяет одновременно обрабатывать несколько запросов, в веб-службах ASP.NET такой возможности нет. Все вызовы веб-методов с включенными сеансами имеют доступ на чтение / запись и будут сериализованы в каждом сеансе.

Предупреждение. Эта статья старая (2002 г.).

0 голосов
/ 03 июня 2009

В соответствии с документацией MSDN Атрибута WebMethod существует несколько возможных свойств, поэтому я не уверен, какое значение будет иметь истинное значение в вашем Атрибуте WebMethod.

Вы пробовали:

[WebMethod(EnableSession=true)]

Согласно этому документу , который должен предоставить вам полный доступ к сеансу.

...