Конструктор, вызываемый при каждом вызове метода WCF HTTPS

#c# #asp.net #wcf #https #basichttpbinding

#c# #asp.net #wcf #https #basichttpbinding

Вопрос:

У меня странная проблема (или может быть странной только для меня)

У меня был веб-сервер WCF, размещенный с помощью wsHttpBinding. (HTTP)

Все было хорошо.

Я переключился на BasicHttpBinding, потому что хотел получить к нему доступ с PHP. Я также создал свой сервис HTTPS, так что теперь его базовая привязка HttpBinding выполняется через HTTPS.

Служба работает нормально (почти так, как ожидалось), и методы тоже работают так, как ожидалось.

Однако я заметил, что в последней конфигурации (wsHttpBinding, HTTP), когда клиент вызывал первый метод, который вызывал мой сервисный конструктор, а затем для любого другого метода он больше никогда не вызывался. (что было хорошо, поскольку я выполнял некоторый код в constructor, который я хотел запустить только один раз, когда клиент начнет использовать службу)

Но в новой конфигурации (BasicHttpBinding, HTTPS) конструктор вызывается для каждого выполняемого метода.

Это нормально, или я что-то делаю неправильно? Если это нормально, то прежде всего, что я должен сделать для кода, который я хочу запускать один раз за сеанс (клиент). И если у вас есть время, почему это так, что поведение по HTTP отличается, а по HTTPS другое? (или это из-за разницы в привязках?)

Спасибо.

Ответ №1:

По умолчанию InstanceContextMode для службы WCF является PerSession , и это поддерживается через HTTP используемой вами привязкой. Однако HTTPS предотвращает возникновение этого поведения сеанса по умолчанию, и поэтому вы видите PerCall поведение (которое каждый раз будет создавать новый объект service). Смотрите Этот пост о том, как это исправить.