2010-09-30 3 views
0

У меня есть несколько веб-сервисов. Одна из этих служб используется для извлечения идентификатора сеанса (аутентификации). Я передаю этот идентификатор, когда вызываю другие службы через SessionInfo. Я хочу использовать WCF вместо классических веб-методов. Как я могу поделиться одним сеансом между несколькими клиентами wcf?Как я могу поделиться одним сеансом между несколькими клиентами wcf?

ответ

2

Непонятно, что вы подразумеваете под сессией. WCF поддерживает четыре типа сеансов:

  • Транспортная сессия - для транспортного протокола, который поддерживает сеанс между сервером и клиентом. Например: Net.Tcp, Net.Pipe
  • Надежная сессия - поддержка надежной доставки по ненадежному каналу, если работают как клиент, так и сервер
  • Сеанс безопасности - клиент должен быть аутентифицирован только для первого вызова, последующий вызовы аутентифицируются с помощью токена сеанса. Этот сеанс также называется контекстом безопасности.
  • Сессия приложения - это имеет смысл для IsInitiating и IsTerminating параметров контракта на работу и PerSession instancing. Этот сеанс можно использовать, только если используется какой-либо из предыдущих сеансов = он не может использоваться в BasicHttpBinding, поскольку он не поддерживает транспорт, надежность и сеанс безопасности.

Все эти сеансы связаны с связью между прокси-сервером и единственным экземпляром службы. Больше ничего не предоставляется из коробки. Кроме того, нет специального «сеансового» объекта.

А что именно вы пытаетесь достичь? Вы собираетесь заменить службы ASMX, которые используют сеанс ASP.NET? В этом случае проверьте это sample.

Edit:

Идея о получении одного Id от первой службы и повторное использование этого Id на последующих вызовах нескольких служб следует назвать corelation (одна большая активность/сделка) или федерация (связанной безопасности) не сессия.

+0

Мой вопрос немного глупо .. Я решил проблему другим способом. Но ваш ответ очень интересен и полезен для меня. – RredCat

0

Как marc_s говорит, что вы не можете поделиться сеансом.

Но что вы можете сделать, это передать идентификатор сеанса в качестве параметра в ваших вызовах WCF, чтобы вы знали, от кого вы звоните.

Убедитесь, что вы используете шифрование для этих вызовов.

0

Рекомендованный путь к этому - вручную поддерживать состояние сеанса между вызовами. Вы генерируете идентификаторы сеанса так, как хотите, и загружаете/сохраняете информацию о сеансе в базу данных при каждом вызове, используя свою собственную логику.

Делая это, вы будете поддерживать сеансы в пути, которые позволят:

  • балансировки нагрузки
  • сеанс обмена
  • Сбой над
Смежные вопросы