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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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