Когда закрыть клиент WCF?


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

Я не закрываю клиент, я оставляю его открытым на все время работы приложения. Основная причина этого заключается в том, что если бы я следовал за комментарием // на странице WCF service mex (который вы получаете, Если вы указываете браузер на url-адрес службы WCF), он говорит // всегда закрывать клиент. клиент.Close ();

Что нормально, за исключением того, что я звоню клиент.Close() сразу после того, как я позвоню клиенту.SomeAsync() метод, то он закрыт, прежде чем придут результаты. Я должен быть ввод объектов в завершенном() метод? Или я должен просто забыть о его закрытии, так как после его закрытия я должен создать новый экземпляр прокси-сервера клиента (можно также не хранить его в приложении.собственность, если это так.

Спасибо, Стивен

2 18

2 ответа:

Вы должны закрыть его, как советуют. И да, если вы используете асинхронные методы, то вы должны закрыть его только после завершения вызова.

Создание (Открытие) и закрытие клиентов является нормой для клиентов WCF. Нет заметного снижения производительности для непрерывного создания и закрытия новых клиентов.

Явно закройте его предпочтительно в finally{} вашего завершенного метода. По какой-либо причине, если клиент остается на связи, вы начнете блокировать другие клиентские звонки. Согласно HTTP RFC:

Определено в 1999 году (RFC 2616) "клиенты что использовать постоянные соединения следует ограничить количество одновременных связи, которые они поддерживают с данный сервер. Однопользовательский клиент Не следует поддерживать более 2 соединения с любым сервером или прокси. Прокси-сервер должен использовать до 2*N подключения к другому серверу или прокси, где N-число одновременно активные пользователи. Эти руководящие принципы предназначены для улучшения Время ответа HTTP и избежать скопление."Так как разработчики являются использование AJAX или AJAX-подобных запросов для обновление веб-страницы ограничения http обсуждали все больше и больше.

С нагрузкой, если вы не закрываете свои соединения, очень возможно, что вы начнете блокировать. Я, конечно, предполагаю, что это HttpBinding.