Прокси-сервер клиента WCF — какова наилучшая практика для каждого экземпляра в потоке?

#wcf #proxy #client

#wcf #прокси #клиент

Вопрос:

Каковы наилучшие методы управления одним экземпляром прокси-сервера клиента WCF для каждого потока? Я использую защищенный WCF сервис с сгенерированным клиентским прокси. Я использую кэширование токенов, чтобы уменьшить накладные расходы на вызов STS для каждого вызова, и это работает успешно. Однако я создаю прокси с использованием одного из нестандартных конструкторов, который предотвращает кэширование — смотрите здесь

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

  • Должен ли я всегда явно вызывать .Open()
  • Должен ли я когда-либо вызывать .Close()
  • Должен ли я всегда проверять State качество канала перед его использованием и инициализировать новый прокси, если он находится в Faulted состоянии (и вызывать .Abort() старый)?

Существуют ли какие-либо другие рекомендации, о которых я должен знать?

Комментарии:

1. Это сильно зависит от того, как работает ваш сервис. Есть ли у вас привязка без состояния или с полным состоянием?

2. служба защищена с помощью WIF и использует WS2007FederationHttpBinding, но служба не отслеживает состояние. Я также хотел бы избежать согласования контекста безопасности при каждом вызове, чтобы еще больше сократить накладные расходы.

3. Если вы не хотите согласовывать безопасность для каждого вызова, вы должны повторно использовать прокси-сервер и использовать secure conversation => служба с отслеживанием состояния, потому что secure conversation создаст сеанс безопасности.

4. Без кэшированного прокси я превышаю лимиты после вызова метода 10 раз. У меня был асинхронный метод, который неправильно удалял прокси в «Конце». Я понимаю, что это связано с настройкой MaxConcurrentSessions в службе. Я увеличиваю этот лимит (я использую 3.5, и обратите внимание, что с 4.0 они были увеличены) Я предполагаю, что если бы я кэшировал прокси, у меня было бы гораздо меньше шансов превысить лимит? Я также понимаю, что если я кэширую, я не могу использовать «Using». Являются ли тайм-ауты, кстати, для клиента / службы проблемой (т. Е. Если прокси кэшируется)? Должен ли я кэшировать или использовать using? Будем признательны за любые дальнейшие советы.

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