#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). Смотрите Этот пост о том, как это исправить.