Когда закрыть клиент WCF? - PullRequest
18 голосов
/ 27 апреля 2009

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

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

что нормально, за исключением того, что я вызываю client.Close () сразу после вызова метода client.SomeAsync (), после чего он закрывается, прежде чем возвращаются результаты. Должен ли я положить закрытие в метод Completed ()? Или я должен просто забыть о его закрытии, так как после его закрытия я должен создать новый экземпляр клиентского прокси-сервера (может, в таком случае, не сохранять его в App.property.

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

Ответы [ 2 ]

12 голосов
/ 27 апреля 2009

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

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

1 голос
/ 27 апреля 2009

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

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

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

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