Время жизни канала WCF с повторными вызовами
Вопрос
Может быть, это очевидный вопрос, может быть, это не так. Представьте себе приложение управления графическим интерфейсом, в котором каждая кнопка нажимает, называет другую функцию в удаленной службе WCF. Использование кнопки часто встречается примерно каждые несколько секунд. В целом лучше ли открыть и закрыть канал WCF каждый вызов функции или удерживать канал открытым для срока службы приложения? Предполагая, что, конечно, есть только несколько экземпляров этого приложения.
Нб. Этот вопрос не совсем о примере, а в том, чтобы помочь мне разобраться в лучшей практике здесь.
Решение
Не рекомендуется оставлять канал открытым, но оставлять WCF, чтобы решить, когда физически закрывать открытые каналы. Вы можете сохранить некоторые ресурсы, используя один и тот же клиент -объект снова и снова, просто убедитесь, что No 2 потоков используют его одновременно (в случае 2 кнопок можно нажать сразу или один сразу после другого).
Другие советы
Если вы можете избавить себя от необходимости воссоздать клиент -прокси до каждого вызова, это определенно было бы полезно для вашей работы.
НО: Это должно убедиться, что все исключения на стороне сервера обрабатываются должным образом (возможно, путем реализации IErrorHandler
Интерфейс на вашем сервисе) и превращен в неисправности мыла, которые могут быть переданы обратно клиенту, не нарушая канал.
Если единственное исключение ускользает от вас и отправит обратно клиенту в качестве «обычного» .NET Exception, канал (связь между вашим клиентом и сервером) будет ошибочно -> т.е. сделан бесполезным.
В таком случае вам нужно сначала проверить это состояние (на канале есть .State
Свойство), и если вы столкнетесь с неисправным каналом, вы ничего не можете сделать, кроме как повторно создать прокси клиента, прежде чем вызовать методы.