Начало сеанса в веб-сервисе .NET ASMX - PullRequest
19 голосов
/ 21 июля 2010

У меня есть веб-сервис ASMX, расположенный рядом с моим веб-приложением ASP.NET.Теперь мне нужно включить сеанс пользователей в веб-сервис.Чтобы проверить это, я сделал этот простой метод:

    [WebMethod(EnableSession = true)]
    public string checkSession()
    {
        return HttpContext.Current.Session["userid"].ToString();
    }

Итак, сначала я войду в свое веб-приложение, затем в браузере зайду в свой веб-сервис и нажму «checkSession» на этой автоматически сгенерированной тестовой странице.Я проверил это на 3 компьютерах.Все 3 из них прекрасно работают с веб-приложением (поэтому сеансы создаются и т. Д.), И 2 из них возвращают значение Session ["userid"] при вызове веб-метода, однако последний компьютер возвращает "Ссылка на объект не установлена ​​наЭкземпляр объекта ", поскольку Session имеет значение null.

Итак, в чем разница между этими компьютерами и почему мое приложение ASP.NET может получать сеансы на всех компьютерах, но веб-служба не может?

Ответы [ 7 ]

9 голосов
/ 01 июня 2017

возможно, уже слишком поздно, но вы пробовали это:

[WebMethod(EnableSession = true)]
public string checkSession()
{
    return HttpContext.Current.Session.SessionID
}
3 голосов
/ 17 мая 2012

SessionID по умолчанию хранятся в виде файлов cookie в браузере клиента ( Обзор состояния сеанса ). Поэтому проверьте, правильно ли создается этот файл cookie на этом проблемном компьютере. Может быть, куки по какой-то причине отключены? В этом случае он не будет отправлять SessionID на сервер, когда вы подключаетесь к этому веб-сервису.

2 голосов
/ 03 ноября 2012

Можете ли вы проверить, сколько рабочих процессов использует ваше приложение? Вы можете проверить это в настройках пула приложений в IIS.

Если используется более одного рабочего процесса, он вызывается для запуска веб-сада. В этом случае сеанс proc не будет полезен, так как этот сеанс не распределяется между рабочими процессами . Просмотрите http://www.west -wind.com / weblog / posts / 2005 / Apr / 20 / Почему вы не должны использовать InProc-Session-State-in-ASPNET

1 голос
/ 27 сентября 2012

Если у вас отключен сеанс в IIS, это превысит правило .net.

Посмотрите на это http://technet.microsoft.com/en-us/library/cc732964(v=ws.10).aspx - оно говорит вам, как отключить сеанс, но показывает, где проверитьнастройка.

Спасибо, Фрэн

0 голосов
/ 04 января 2014

Веб-сервис по умолчанию не поддерживает сессию.Вам необходимо явно указать параметр в атрибуте веб-метода

Эти две вещи работают для меня

  1. <add name="Session" type="System.Web.SessionState.SessionStateModule"/> в <httpModules>

  2. enableSessionState="true" в <page> тег

0 голосов
/ 23 октября 2012

лучший способ сделать этот подход, проверять, прежде чем ваш сеанс не является нулевым, и с другой стороны вы инициализируете выбранный сеанс со своим значением, а затем, когда и где веб-служба, работающая с httpcontext.current.session, имеет значение!

веб-сервисы не сохраняют состояние, и лучший способ - получить значение в веб-сервисе вместо установки или инициализации значения сеанса

0 голосов
/ 17 октября 2012

По умолчанию веб-сервисы являются и должны быть без сохранения состояния.Однако если вам необходимо использовать информацию о сеансе, обязательно используйте интерфейсы маркеров IReadOnlySessionState и IRequiresSessionState для доступа, использования или изменения информации о состоянии сеанса в веб-сервисе.

...