2010-03-23 2 views
2

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

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»?

Спасибо,

ответ

2

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

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

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

Обновлено: From the documentation (хотя и несколько похоронено)

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

...

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

Смежные вопросы