2010-09-14 2 views
1

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

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

     Session["Company_Name"] = businessname; 

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

    } 

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

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

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

} 
+0

Хм, есть ли способ избежать использования сеанса здесь? Веб-службы (например, HTTP) должны быть безстоящими - это достаточно плохо, используя сеанс в веб-службах, не говоря уже о совместном сеансе между двумя различными веб-методами. Я не знаю, будет ли это работать. ASP.NET может сериализовать сеанс в соответствии с веб-методом, и, следовательно, идентификатор файла cookie отличается. Можете ли вы получить доступ к сеансу ["Company_Name"] в веб-методе 1? Если это так, я думаю, что это правильно. – RPM1984

+0

Спасибо за ответ, я могу получить доступ к строке companyname = (строка) Session ["Company_Name"]; – mahesh

+0

Я могу получить доступ к этому коду в webmethod1. – mahesh

ответ

2

Это двойной пост в how to exchange session or cookie variables between two webmethods in 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

Я пытаюсь реализовать некоторую безопасность, когда пользователь успешно войдет в мое веб-приложение, я установил переменную сеанса, чтобы убедиться, что пользователь, вызывающий метод, был успешно зарегистрирован в моем веб-приложении, я проверяю эту переменную сеанса на веб-сервере то только выполните веб-метод, если у них есть правильные привилегии, из того, что вы сказали здесь, я делаю все это неправильно, что является правильным способом для достижения моей цели? Любые ссылки или информация будут высоко оценены, я хочу сделать это «правильным» способом, но я не знаю, что это такое ... – EaziLuizi

+0

Я думаю, что проблема здесь в выборе технологии. Где вы вызываете веб-сервис, если пользователь является пользователем веб-приложения? Если вы хотите, это вызов веб-службы с веб-страницы, сделайте запрос ajax от javascript вместо этого, вы можете использовать аутентификацию своего веб-приложения. –

+0

Это то, что мне нужно, спасибо за ваш совет :) – EaziLuizi

0

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

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

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

+0

Написание xml вы хотите сказать построить xml и сохранить его на сервере и получить доступ к другому веб-методу? – mahesh

+0

В моем файле webconfig у меня нет sessionState, нам нужно добавить любую библиотеку? – mahesh

+0

Вам необходимо: <конфигурация>. Для этого вам не нужно добавлять ссылки. Сохранение режима sessionState = «InProc» позволит вам использовать объект HttpSessionState, который будет находиться в памяти. Пожалуйста, дайте мне знать результат, как только вы добавите вышеуказанный раздел конфигурации в свой web.config. –

Смежные вопросы