Silverlight - закрытие службы - PullRequest
2 голосов
/ 23 марта 2010

Я работаю над приложением Silverlight, которое работает со службами WCF. Загружая метаданные службы в моем браузере, я заметил, что он предоставляет следующий код:

class Test
{
    static void Main()
    {
        myServiceClient client = new myServiceClient();

        // Use the 'client' variable to call operations on the service.

        // Always close the client.
        client.Close();
    }
}

В последней строке написано «Всегда закрывайте клиента». У меня вопрос, когда вы должны закрыть клиент в приложении Silverlight? Вы должны закрыть его после вызова «[MyServiceOperation] Async» или закрыть его в обработчике события «[MyServiceOperation] Completed»?

Спасибо,

1 Ответ

2 голосов
/ 23 марта 2010

Close блоков при использовании в асинхронном сценарии.

Существует также BeginClose / EndClose асинхронный вариант кода, если вы не хотите, чтобы ваш код вызова блокировался, но из того, что я вижу, если вы звоните .Close, он будет ждать, пока ваши ожидающие вызовы не разрешатся до того, как .Close вернется.

Также обратите внимание, что вызов его в обработчике Completed может вызвать проблемы с несколькими асинхронными вызовами к одному и тому же клиентскому объекту ... Я бы рекомендовал сделать это в коде вызова с .Close или .BeginClose

Обновлено: Из документации (хотя и несколько похоронено)

Этот метод вызывает ICommunicationObject для изящно переход из открытого состояния в Закрытое состояние. Метод Close позволяет любую незаконченную работу завершено до возвращения. (За Например, закончить отправку любого буферизированного сообщений.)

...

Закрытие возвращается после достижения закрытого состояния.

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