Время жизни канала WCF с повторными вызовами - PullRequest
3 голосов
/ 06 января 2010

Может быть, это очевидный вопрос, а может и нет. Представьте себе приложение для управления с графическим интерфейсом, в котором каждое нажатие кнопки вызывает разные функции в удаленной службе WCF. Кнопки часто используются примерно каждые несколько секунд. В общем, лучше ли открывать и закрывать канал WCF при каждом вызове функции или держать канал открытым в течение всего срока службы приложения? Предполагая, конечно, что есть только несколько экземпляров этого приложения.

NB. Этот вопрос на самом деле не о примере, а о том, как помочь мне осмыслить лучшую практику здесь.

Ответы [ 2 ]

2 голосов
/ 06 января 2010

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

НО: делая это, вы должны убедиться, что все исключения на стороне сервера обработаны должным образом (возможно, путем реализации интерфейса IErrorHandler в вашей службе) и превращены в ошибки SOAP, которые могут быть передан обратно клиенту без ошибок канала.

Если одно исключение ускользает от вас и отправляется обратно клиенту как «обычное» исключение .NET, канал (канал связи между вашим клиентом и вашим сервером) будет неисправен - > т. е. признаны бесполезными.

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

1 голос
/ 09 января 2010

Не рекомендуется оставлять канал открытым, но оставляйте WCF решать, когда физически закрывать \ открывать каналы. Вы можете сохранить некоторые ресурсы, используя один и тот же клиентский объект снова и снова, просто убедитесь, что никакие 2 потока не используют его одновременно (в случае, если 2 кнопки можно нажимать сразу или одну сразу за другой).

...