WCF IDisposable дизайн дискретность - PullRequest
0 голосов
/ 22 декабря 2010

Почему именно эта конкретная реализация клиента WCF реализует IDisposable, а не стандартный интерфейс «из коробки», предоставляемый для каждого клиента wcf как часть .net?

    using(WcfClient client = new WcfClient) 
    {
         client.WebMethod();
    }


    using(IWcfClient client = new WcfClient) 
    {
         client.WebMethod();
    } //throws bc it's not part of the Interfact but is the part of the base class every wcf client implements along the interface?

Почему бы не сделатьэто часть интерфейса, так как вы можете выбрать способ очистки wcf по-своему?

1 Ответ

1 голос
/ 22 декабря 2010

Это потому, что интерфейс является контрактом данных веб-службы, и для контракта данных не имеет смысла реализовывать IDisposable. Контракт с данными содержит контракты на операции, в которых нет ничего, что можно было бы распорядиться. Это канал, который должен быть удален, и поэтому автоматически сгенерированный прокси-класс (WcfClient) реализует IDisposable.

Вы можете попробовать это, если будете настаивать на использовании вашего контракта на данные:

IWcfClient client = new WcfClient();
using((IDisposable)client) 
{
    client.WebMethod();
}

но я действительно не вижу, что не так с:

using(var client = new WcfClient()) 
{
    client.WebMethod();
}
...