Использование клиента WCF - PullRequest
1 голос
/ 23 июля 2010

В моем приложении я использую client.open и client.close, чтобы открыть прокси-канал WCF, использовать метод wcf и, наконец, закрыть его.Я делаю это в нескольких частях моего приложения Windows Forms.

Однако я заметил, что client.close не обязательно немедленно закрывает соединение.Почему это?Должен ли я использовать client.Abort вместо этого?

Правильно ли я использую клиент WCF?то есть clien.open -> вызов метода WCF -> client.close.

Заранее благодарен за любую помощь!

Subbu

1 Ответ

1 голос
/ 23 июля 2010

Метод .Close() попытается корректно закрыть соединение, например, ожидающий вызов все равно будет завершен сервером, и только после этого соединение будет прервано.Используйте это всякий раз, когда это возможно - это мягкий и предпочтительный способ закрытия клиентского соединения.

.Abort() на самом деле просто разрывает канал связи - независимо от того, идет ли вызов или нет.Это окончательный аварийный люк в крайнем случае, если ошибка .Close() не удалась.

В качестве наилучшей практики я бы обернул свои сервисные вызовы в блок try...catch, примерно такой:

try
{
    myServiceClient.CallSomeMethod();
    myServiceClient.Close();
}
catch(FaultException<SomeError>)
{
    myServiceClient.Abort();
}
// possibly other catch clauses, too - call .Abort() inside them
catch(CommunicationException)
{
    myServiceClient.Abort();
}
...