2015-08-11 2 views
0

WCF Сессии инициируются атрибутомкак прекратить ФОС сеанс

[OperationContract(IsInitiating = true, IsTerminating = false)] 

и заканчивали

[OperationContract(IsInitiating = false, IsTerminating = true)] 

Есть ли способ, чтобы завершить текущий сеанс WCF, основанный на каком-то состоянии? Предположим, что проверка учетных данных еще не позволяет начать сеанс. Есть ли способ сделать это, не выбрасывая исключение из контракта на операцию, который инициирует сеанс.

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

+0

Я действительно не знаю ответа на этот вопрос, но мне интересно: что бы вы отправили обратно клиенту? – Stefan

+0

У меня нет образца кода на данный момент, но создайте класс, который реализует IParameterInspector, и выкинет пользовательский контракт на отказ в методе 'BeforeCall', если ваша проверка достоверности не удалась. Документируйте контракт о неисправности в своем api. Кроме того, тот же класс реализует 'Attribute', поэтому вы можете просто применить это поведение к любой операции или даже к классу. – Crowcoder

ответ

0

Есть ли способ прекратить текущую сессию WCF на основе какого-то условия ? Предположим, что проверка учетных данных еще не позволяет начать сеанс . Есть ли способ сделать это без исключения исключения в операционном контракте , который инициирует сеанс.

Base на вашей коду IsInitiating и Isterminating автоматически сгенерирует исключение клиента после того, как метод был вызван с

IsInitiating = ложью, IsTerminating = истина

без вызова метода с

IsInitiating = true, IsTerminating = false

И я не думаю, что вы можете справиться с этим без исключения исключения, потому что WCF работает над ним под капотом. Или может быть их было ", о котором я не знаю".

Вы можете рассмотреть несколько сведений, которые я написал ниже.

Вы не указали, какой тип обмена сообщениями вы используете в своей службе.

  • Если вы используете двустороннюю передачу сообщений, вы можете закрыть или прервать соединение, не вызывая никаких исключений клиенту.

И какой механизм авторизации валидации вы внедрили?

  • Если ваша проверка подлинности использует пользовательский UserNamePassword validator, я не думаю, что это способ ее прекратить без исключения исключения.
  • Если вы используете сертификат с учетными данными, я не думаю, что вам нужно завершить сеанс, потому что он завершается после того, как аутентификация не будет успешной.

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

  • Если вы реализовали надлежащую проверку учетных данных, вам не нужно беспокоиться о «убедившись, что клиент не делает дополнительный Calss ...» потому что сессия не инициирована вообще.

Дополнительная информация о различных способах использования close подключение в WCF.

Смежные вопросы