2008-11-09 2 views
4

В настоящее время мы работаем над приложением, которое будет использовать службу WCF. Хост (клиент) использует отличный WCF Service Proxy Helper from Erwyn van der Meer.Поддерживает ли WCF соединение клиента под капотом?

Что бы я хотел знать ... это если я открою этот объект несколько раз ... приведет к нескольким (дорогостоящим) подключениям или WCF будет управлять им и объединить соединения.

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

Например .:

MyService.MyMethod1() // wraps the connection usage as well as the call to the service 

Любые предложения о том, как я хотел бы пойти, чтобы свести к минимуму количество соединения, сохраняя при этом код соответствовать SRP будет отлично.

Итак? Есть идеи?

+0

Будет проверять ответы на 3 ответа завтра и даст мое мнение о том, какой из них лучше. :) – 2008-11-09 23:30:36

ответ

4

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

Связь между прокси-объектами и соединениями зависит от используемого транспорта. Для HTTP-транспорта для каждого вызова функции запускается HTTP-соединение. Для транспорта net.tcp соединение устанавливается в Open() и сохраняется до Close(). Некоторые параметры привязки (например, поддерживающие WS-SecureConversation) будут нести дополнительные «домашние» подключения и обмен сообщениями.

AKAIK, никакие из готовых привязок не выполняют пул соединений.

+0

, поэтому, если у меня есть один прокси-объект, я могу вызвать его методы в разных потоках одновременно (если моя логика является потокобезопасной). Так что лучше; вызов из одного объекта или наличие объекта для каждого потока? – 2009-05-13 06:39:01

3

Вы можете проверить this article информацию о передовых методах использования прокси.

3

Это не объединение, как SqlConnection, если это то, что вы имеете в виду.

[Предостережение: Я использую «соединение» здесь свободно означает логическое соединение, не обязательно физическое соединение]

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

В частности, с точки зрения управления жизненным циклом, когда прокси-сервер сработал, он остается неисправным - поэтому вам нужно будет восстановиться после случайного сбоя (что следует ожидать). Точно так же в некоторых конфигурациях (некоторые комбинации сеанса/instancing) соединение имеет определенный след на сервере - поэтому для улучшения масштабируемости вы должны поддерживать связь недолго. Конечно, для true масштабируемости вы обычно хотели бы отключить эти параметры в любом случае!

Стоимость создания соединения также зависит от таких вещей, как режим безопасности. IIRC, было бы дороже открыть двустороннее проверенное соединение с использованием безопасности сообщений, чем для создания соединения TransportWithMessageCredential, поэтому здесь очень много значит «YMMV».

Лично я считаю, что самая большая распространенная проблема с производительностью прокси-сервера не имеет ничего общего со временем, чтобы настроить соединение - это болванка API. т.е.

Сценарий:

  • открыть соединение
  • выполнить 1 операцию с большой полезной нагрузкой (т.е. сообщение, что означает «сделать эти 19 вещей»)
  • закрыть Прокси-сервер

Сценарий B:

  • Открыть контакт nnecton
  • выполнять 19 операций с небольшими полезными нагрузками
  • закрыть соединение

Тогда сценарий А, как правило, значительно быстрее из-за латентности и т.д. И ИМО даже не думать о распределенных транзакций через WCF; -p

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