WCF Закрытие соединения / Выпуск ресурсов - PullRequest
1 голос
/ 17 мая 2011

Я недавно преобразовал свой сервис ASMX в WCF, чтобы использовать преимущества сеансов.

Я просмотрел некоторые учебные пособия по сеансам в MSDN, но все еще не уверен, что в моем коде есть хорошие настройки. на данный момент это работает, но я не совсем уверен, почему.

Я получил

[ServiceContract
    (SessionMode = SessionMode.Required,
     Namespace = "http://smartshopservice.org")]

Тогда у меня есть

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class SmartShopService : SmartShopInterface
{
    private static Shopper sh = new Shopper();
    private List<aaa> data = new List<aaa>();

Первая часть моего вопроса состоит в том, является ли Shopper моей "глобальной" переменной. Я хочу, чтобы он всегда был там, в то время как все остальное, такое как «данные», создается для каждой сессии. Я также настроил WebConfig соответственно. Есть ли что-нибудь еще, что мне нужно сделать?

Мой второй вопрос: как закрыть сеанс, а затем сбросить все эти переменные? Мой Клиент сейчас - это WebClient, он общается так:

static GarfieldService.SmartShopInterfaceClient service 
    = new GarfieldService.SmartShopInterfaceClient();

Кажется, это работает, и у меня есть onbody = "" страницы ASP.NET для вызова функции, которая выглядит следующим образом:

[WebMethod]
public static bool Connect() {
    try {
        if (service.State 
            == System.ServiceModel.CommunicationState.Closed) {
            service.Open();
            return true;
        }
        else if (service.State 
            == System.ServiceModel.CommunicationState.Created) {
            service.Open();
            return true;
        }
    }
    catch {}
    return false;
}

Так что я могу подключиться, но как мне отключить или закрыть сеанс?

1 Ответ

0 голосов
/ 18 мая 2011

Re: Глобальные переменные, да, использование статического в службе будет действовать как глобальное, и поскольку вы используете PerSession, переменная «aaa» будет разрешена.

Re: завершение, попробуйте создать операцию завершения и задать параметр атрибута IsTerminating = true.

P.S. Я не думаю, что атрибут WebGet имеет отношение к wsDualHttpBinding.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...