Мне действительно нужно вызвать CloseAsync с WCF - PullRequest
1 голос
/ 19 мая 2011

Если у меня есть функция в silverlight, которая выглядит следующим образом:

    authenticationServiceClient.testCompleted += callback;
    authenticationServiceClient.testAsync();

Действительно ли мне нужно вызывать closeasync или она будет вызвана для меня, когда программа будет завершена?

authenticationServiceClient - это локальная переменная для функции /

Ответы [ 3 ]

2 голосов
/ 19 мая 2011

Когда программа завершится, все открытые соединения будут закрыты.

Если вы хотите избавиться от ресурса во время работы программы, то это зависит от привязки, которую использует клиент.Если вы имеете дело с HTTP-связыванием, то вызывать Close [Async] не обязательно;если вы имеете дело с привязкой TCP, то Close фактически закроет сокет, который остается открытым (в течение некоторого времени).

0 голосов
/ 07 января 2013

Есть несколько шаблонов (которые я также следую) для закрытия прокси-клиента сразу после вызова метода, а не в обратном вызове. В этом случае код выглядит чище, и вы можете использовать не только лямбду в обратных вызовах, но и делегировать функции. как то так:

....
serviceClient.CallMethodCompleted += (s, a) =>.....
// Call
serviceClient.CallMethodAsync();
// Close
serviceClient.CloseAsync();
0 голосов
/ 19 мая 2011

Я всегда придерживаюсь этого паттерна с Silverlight:

// Call
serviceClient.CallMethodCompleted += (s, a) =>
{
    // Error?
    if (a.Error == null)
    {
        // Do something
    }
    else
    {
        // Handle error
    }

    // Close
    serviceClient.CloseAsync();
};

// Call
serviceClient.CallMethodAsync();

Это не обязательно, но это хорошо, поскольку в браузере есть HTTP-сообщения активности и небольшая уборка, никогда никому не вредящая.

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