Подтвердить что ты не робот

Лучшая практика для срока службы прокси-сервера WCF?

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

Если вам нужен более явный контроль, вы можете использовать каналы ChannelFactories и каналы напрямую, а не просто прокси для прокси-серверов "easy to go, full from the box".

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

Ответ 3

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

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

//Throws CommunicationObjectFaultedException
proxy.MyMethod( );

Ответ 4

Здесь имеется ссылка на серверные активированные объекты в .NET Remoting (одна из технологий, заменяемых WCF), которые имеют два режима: "Single Call" (без состояния) и "Singleton" (stateful).

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

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