Состояние экземпляра не сохраняется с помощью экземпляра InstanceContextMode.PerSession

Вопрос:

Я создаю приложение WCF, и мне нужно сохранить состояние экземпляра службы между сеансами. Моя реализация сервиса выглядит так:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class Service : IService {
private int i;

public int Increment() {
return i++;
}
}

Мне нужно сохранить значение переменной я между каждым сеансом. Тем не менее, InstanceContextMode.PerSession похоже, делает то же, что и InstanceContextMode.PerCall. Так что если вызов Increment() несколько раз в клиентском приложении, я получаю 0 каждый раз:

var serviceClient = new ServiceClient();
MessageBox.Show(serviceClient.Increment()); // 0
MessageBox.Show(serviceClient.Increment()); // 0

Я тестировал то же самое, используя InstanceContextMode.Single и он работает так, как ожидалось, но это поведение не подходит моим потребностям, потому что состояние экземпляра службы не может быть сохранено между клиентами.

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

Я собираюсь пойти по капризу и предположить, что вы используете BasicHttpBinding.

BasicHttpBinding не поддерживает сеансы из-за бесконтактности HTTP. Любая привязка, которая не поддерживает надежные сеансы, или если для свойства ReliableSession для привязки установлено значение false, служба будет вести себя как PerCall.

Вы можете просмотреть, какие переплеты поддерживать надежные сессии здесь, и вы можете просмотреть подробную информацию в InstanceContextMode здесь.

Оцените статью
TechArks.Ru
Добавить комментарий