dev.net.ua

Українська Спільнота Розробникiв
 
Ласкаво просимо до dev.net.ua Увійти | Приєднатися | Допомога | Увійти Live ID
в Пошук

Web-сервесы и состояние сеанса

Останнє повідомлення 30-06-2007, 1:45 від Віктор Шатохін. 7 відповіді.
Сортувати: Попереднє Наступне
  •  26-06-2007, 10:13 3545

    Web-сервесы и состояние сеанса

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

    Вот решил начать разбираться с Web-сервисами, и сразу возникла проблема....

    есть два метода в сервесе:
    [WebMethod(EnableSession = true)]
    public string Str1()
    {
    Session["S1"] = "test";
    return Session["S1"].ToString();
    }

    [WebMethod(EnableSession = true)]
    public string Str2()
    {
    Session["S1"] = Session["S1"] + "!!!";
    return Session["S1"].ToString();
    }

    когда запушкаешь в IIS все хорошо:
    после инвока Str1() возвращает xml с текстом "test",
    затем делаю инвок Str2() возвращает xml с текстом "test!!!"

    а проблема в следующем пишу консольное приложение:
    WebReference.Service s = new ConsoleApp1.WebReference.Service();
    Console.WriteLine(s.Str1());
    Console.WriteLine(s.Str2());

    получаю: "test" и "!!!" т.е. не сохранил Session["S1"] !
    почему?
    помогите разобраться, или скажите где прочитать.... или возможно другой способ сохранить общие данные для методов сервиса

    С уважением mr1900
  •  26-06-2007, 10:31 3547 у відповідь на 3545

    Re: Web-сервесы и состояние сеанса

    Сервіс повинен бути stateless, тобто кожен метод окремо, ніяких залежностей, ніяких полів класу, ніяких сесій.

    Якщо все ще цікаво як зберегати загалні дані - кажіть - розповім.


    MCPD(Web,Windows,Enterprise), MCTS (WPF, WCF)
  •  26-06-2007, 11:25 3548 у відповідь на 3547

    Re: Web-сервесы и состояние сеанса

    Mike Chaliy! спасибо что откликнулись...
    мне это интересно.
    Если Вам не трудно, то буду ждать Ваших пояснений...
    P.S.
    неужели нет задач, где методы сервиса должны оперировать общими данными?
    почему stateless?

    С уважением mr1900
  •  27-06-2007, 2:04 3552 у відповідь на 3545

    Re: Web-сервесы и состояние сеанса

    Доброго дня Mike!

    Что Вы думаете по этому поводу:
    Серис:
    [WebMethod]
    public void STR1(ref string s)
    {
    s = "test";
    }

    [WebMethod]
    public void STR2(ref string s)
    {
    s = s + "!!!";
    }
    Клиент:
    string d;
    WebReference.Service s = new ConsoleApp1.WebReference.Service();
    s.STR1(ref d);
    Console.WriteLine(d);
    s.STR2(ref d);
    Console.WriteLine(d);

    Так получаеться как задумывалось:
    "test" и "test!!!"

    Вот только дебаг не работоает (не удобно), и вообще как Вам такое решение?

    С уважением mr1900
  •  27-06-2007, 2:15 3553 у відповідь на 3552

    Re: Web-сервесы и состояние сеанса

    А вот еще предлагают:
    "Между вызовами веб методов нужно в прокси классе таксать с собой CookieContainer созданный для поддержки сессии"

    Вообщем: поскольку мне советоваться некскем, а на этом форуме ни один мой вопрос не остался без внимания и должного пояснения, -> жду Ваших пояснений!!!
  •  28-06-2007, 4:30 3556 у відповідь на 3548

    Re: Web-сервесы и состояние сеанса

    mr1900:
    неужели нет задач, где методы сервиса должны оперировать общими данными? почему stateless? С уважением mr1900

    Існують, але краще зробити так щоб не існувало. Це щось на зразок ООП, ви маєте можливість усе зробити методами, але всеж таки краще щоб були об'єкти.

    Тут декілька проблем:

    1. Потрібно постійно слідкувати, адже сесія може закінчуватись(таймаут, просто пемикання сервера, будь що, такі проблеми завжди виникають вже після деплойменту, тобто кошти на переробку дуже великі);
    2. Без спеціальних налаштувань сервіс не гарантую послідовність викликів, тобто якщо неавіть ви викликаєте перший, а потім другий, то в деяких ситуаціях можливо що спочтаку дійде другий, а потім вже перший;
    3. Сесія може стати проблемою з точки зору безпеки, адже підробити куку не так вже й складно;
    4. Тощо.

    mr1900:
    Что Вы думаете по этому поводу

    Нічого ;), якщо воно вас задовольняє то використовуйте.

    mr1900:
    А вот еще предлагают: "Между вызовами веб методов нужно в прокси классе таксать с собой CookieContainer созданный для поддержки сессии" Вообщем: поскольку мне советоваться некскем, а на этом форуме ни один мой вопрос не остался без внимания и должного пояснения, -> жду Ваших пояснений!!!

    Це нормальне рішення, якщо подивитися на опис WebMethodAttribute.EnableSession Property, то в ремарках можна знайти таку інформацію:

    MSDN:

    An XML Web service client is uniquely identified by an HTTP cookie returned by an XML Web service. In order for an XML Web service to maintain session state for a client, the client must persist the cookie. Clients can receive the HTTP cookie by creating a new instance of CookieContainer and assigning that to the CookieContainer property of the proxy class before calling the XML Web service method. If you need to maintain session state beyond when the proxy class instance goes out of scope, the client must persist the HTTP cookie between calls to the XML Web service. For instance, a Web Forms client can persist the HTTP cookie by saving the CookieContainer in its own session state. Because not all XML Web services use session state and thus clients are not always required to use the CookieContainer property of a client proxy, the documentation for the XML Web service should state whether session state is used.

    Тобто, якщо вам потрібна сесія тельки на час викликів, то просто створюєте CookieContainer, та встановлюєете властивість CookieContainer. Якщо потрібна сесія на час виконнаня програми, то зберегаєете десь глобальний інстанс CookieContainer-а, і кожен раз при створюванні проксі, налаштовуєете його.


    MCPD(Web,Windows,Enterprise), MCTS (WPF, WCF)
  •  29-06-2007, 9:40 3564 у відповідь на 3556

    Re: Web-сервесы и состояние сеанса

    Доброго времени суток Mike!

    Огромное спасибо Вам за расширенное пояснение!!! Все по делу, а главное с ссылками!!!

    огромное спасибо!!!

    С уважением mr1900
  •  30-06-2007, 1:45 3567 у відповідь на 3553

    Re: Web-сервесы и состояние сеанса

    Если есть возможность, я рекомендую использовать для хранения состояния WF. Информацию можно найти здесь http://www.netfx3.com/, http://msdn2.microsoft.com/en-us/library/bb266709.aspx


    З повагою,
    Віктор Шатохін [MSFT]

    Ця інформація надається на умовах «як є», без надання будь-яких гарантій і прав. Використовуючи цю інформацію, ви погоджуєтесь з тим, що (і) Майкрософт не несе відповідальності за використання вами цієї інформації й (іі) ви берете на себе весь ризик, пов’язаний з використанням цієї інформації.
Переглядати як новосний Блог RSS в XML