Почему мой список выходит из области видимости в сообщении WCF?

1

Я изучаю веб-службы RESTful, размещенные с помощью консольного приложения, для решения конкретного варианта использования (ASP.NET переполняет наши текущие потребности), и я немного смущен.

Во-первых, я создал веб- сервис WCF, следуя этим указаниям MSDN. Это хорошо работает, я могу выдавать запросы GET и POST и получать ответ.

Глядя на распространение этого примера на наш прецедент, мне нужно сохранить данные POST в коллекцию:

поэтому я изменил исходный почтовый индекс:

public string EchoWithPost(string s)
{
    return "You said " + s;
}

в

 public List<string> Bc = new List<string>();
 public string EchoWithPost(string s)
    {
        this.Bc.Add(s);
        return "You said " + s;
    }

Ожидая, что мой список будет расти с каждым новым запросом POST. Однако это не так. Наблюдая за отладчиком, я определил, что каждый новый запрос POST создавал новый список, из-за чего старый список выпадает из области видимости и теряется.

Почему это?

Теги:
wcf

2 ответа

5
Лучший ответ

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

  • Измените экземпляр списка на статическую переменную (не рекомендуется).
  • Измените свой экземпляр-контекст-режим на один экземпляр. Это означает, что все ваши запросы wcf обрабатываются одним экземпляром. Недостатком является то, что ваша служба может обрабатывать только один запрос за раз. См. Здесь. Не рекомендуется также, если вам нужно обрабатывать несколько запросов одновременно.
  • Измените свой экземпляр-контекст-режим на сеанс. В основном экземпляр вашего сервиса создается для каждого клиента.

Я подозреваю, что третий вариант наиболее подходит для ваших нужд.

  • 1
    Почему статический не рекомендуется?
  • 1
    @RobertH по той же причине, что 2-й вариант не рекомендуется, вы можете поддерживать только один клиент за раз, так как два одновременных пользовательских запроса будут бороться за то, кто был «последним» запросом.
Показать ещё 3 комментария
0

Потому что новый экземпляр вашего сервиса создается каждый раз, когда вы выполняете новый вызов.

Вы должны использовать статический список или использовать другой тип сохранения.

public static List<string> Bc = new List<string>();
public string EchoWithPost(string s)
{
    this.Bc.Add(s);
    return "You said " + s;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню