Как обмениваться переменными сеанса между веб-методами в веб-сервисах asp.net - PullRequest
1 голос
/ 14 сентября 2010

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

[WebMethod(EnableSession = true)]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
 public bool SubmitList1(string businessname )
    {

        Session["Company_Name"] = businessname;  

        SqlConnection con = new SqlConnection();
             .......
           .........
                .........

  }

Это будет мой второй веб-метод, где япытаюсь получить переменную сеанса

[WebMethod(EnableSession = true)]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public bool addresslisting()
    {

        string companyname = (string)Session["Company_Name"];// this particular value is displaying null
       ......
           ........

}

Ответы [ 2 ]

2 голосов
/ 16 сентября 2010

Это двойной пост к о том, как обмениваться переменными сеанса или cookie-файлов между двумя веб-методами в asp.net webservices , так что здесь снова:

Отказ от ответственности: я думаю, чтовеб-сервис, который полагается на состояние сеанса, просто НЕПРАВИЛЬНО, так как веб-сервис должен быть без состояния.Однако:

На http://msdn.microsoft.com/en-us/library/aa480509.aspx вы можете прочитать о том, как использовать сеанс ASP.NET в веб-службе:

  1. Убедитесь, что /configuration/system.web/Параметр sessionState в web.config настроен правильно, чтобы включить состояние сеанса
  2. . Убедитесь, что в веб-службе используется контейнер cookie, в котором можно сохранить файл cookie сеанса ASP.NET.Если клиент использует веб-браузер (например, вызов ajax), это обычно работает «из коробки», но если вы создаете автономный клиент, вам придется проделать дополнительную работу, см. Ссылку выше.

В целом: плохое дизайнерское решение дает вам больше работы, чем необходимо (извините за втирание).

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

0 голосов
/ 14 сентября 2010

Я думаю, что вы можете использовать: Context.Session["Company_Name"] = businessname и сохранять [WebMethod(EnableSession = true)] для каждого веб-метода.

Также убедитесь, что в файле web.config включен режим конфигурации> system.web> sessionState.Если вы отключите состояние сеанса из web.config, то и состояние сеанса также может не работать.

Если вы не хотите использовать состояние сеанса, вы можете записать значение в файл XML с помощью UserId / SessionIdв качестве родительского элемента, а затем читать его при необходимости.

...