Как я могу разделить один сеанс между несколькими клиентами wcf - PullRequest
0 голосов
/ 30 сентября 2010

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

Ответы [ 3 ]

2 голосов
/ 30 сентября 2010

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

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

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

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

Редактировать:

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

0 голосов
/ 01 октября 2010

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

Таким образом вы будете поддерживать сеансы таким образом, чтобы включить:

  • Балансировка нагрузки
  • Совместное использование сеанса
  • Fail over
0 голосов
/ 30 сентября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...