Дизайн WCF: используется механизм сеанса и вызова? - PullRequest
1 голос
/ 16 февраля 2010

Я должен спроектировать веб-сервис, используя WCF, который выдает методы, которые не требуют сеанса (например, статические вызовы, например, возвращают некоторую информацию о самом веб-сервисе), и другие методы, которые требуют сеанс.

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

мой текущий дизайн будет выглядеть так:

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

это хороший / возможный выбор дизайна?
это общий сценарий, который использует общий дизайн?
был бы рад любым подсказкам по чтению, так как помощь msdn мне не помогла.

спасибо за ваши ответы
-redoced

1 Ответ

2 голосов
/ 16 февраля 2010

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

Потому что: либо он не поддерживает многопоточность, но в этом случае он становится огромным узким местом - запросы обрабатываются строго последовательно - один за другим. Не очень хорошо для производительности.

Или же вам нужно сделать так, чтобы весь сервис многопоточности знал - и позвольте мне сказать вам, что это правильно, безопасно и эффективно не для слабонервных. Это действительно очень трудно сделать правильно и заставить его работать хорошо.

Я действительно не вижу в этом никакой необходимости.

  • оставит вам "статические" вызовы сообщений (как вы их называете), которые будут сервисами для каждого вызова - они просты в программировании, работают хорошо, работают хорошо, никогда не вызывают проблем с многопоточностью

  • те немногие сервисные вызовы (надеюсь!), Которые требуют сеанса - поместите их в свои собственные конечные точки обслуживания, сделайте их для каждого сеанса, используйте «SessionId» в своем сеансе для их идентификации. Это немного больше работы, чем за вызов, но все еще далеко не так сложно и подвержено ошибкам, как многопоточное программирование

Ресурсы для сессий WCF:

Ресурсы для устойчивых услуг WCF (которые сохраняют свое состояние между вызовами):

Ресурсы для служб WCF Workflow:

...