Вопрос

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

Нб. Этот вопрос не совсем о примере, а в том, чтобы помочь мне разобраться в лучшей практике здесь.

Это было полезно?

Решение

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top