Наилучшая практика для срока службы прокси WCF? - PullRequest
14 голосов
/ 01 декабря 2008

При работе со службами WCF лучше ли создавать новый экземпляр службы при каждом его использовании? Или лучше создать его и использовать повторно? Почему любой подход лучше? Это то же самое для асинхронных прокси?

Ответы [ 4 ]

15 голосов
/ 29 ноября 2009

Или лучше создать его и использовать повторно?

Не начинайте реализовывать собственную реализацию пула. Это уже было сделано в рамках. Прокси WCF использует фабрики с кэшированными каналами. Поэтому создание новых прокси не слишком дорого (но см. Ответ Гая Старбака относительно сессий и безопасности!).

Также имейте в виду, что время прокси истекло после определенного времени простоя (по умолчанию 10 минут).

Если вам нужен более четкий контроль, вы можете рассмотреть возможность использования ChannelFactories и каналов напрямую, а не «простых в использовании, полнофункциональных» прокси ClientBase.

http://msdn.microsoft.com/en-us/library/ms734681.aspx

И "должен прочитать" по этой теме: http://blogs.msdn.com/wenlong/archive/2007/10/27/performance-improvement-of-wcf-client-proxy-creation-and-best-practices.aspx

5 голосов
/ 27 февраля 2009

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

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

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

5 голосов
/ 28 ноября 2009

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

IMyContract proxy = new MyContractClient( );
try
{
   proxy.MyMethod( );
}
catch
{}

//Throws CommunicationObjectFaultedException
proxy.MyMethod( );
3 голосов
/ 01 декабря 2008

Здесь есть следствие для активируемых сервером объектов в .NET Remoting (одна из технологий, заменяемых WCF), которые имеют два режима: «Один вызов» (без сохранения состояния) и «Синглтон» (с контролем состояния).

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

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

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