как закрыть клиент wcf - PullRequest
       0

как закрыть клиент wcf

2 голосов
/ 29 июня 2011

На своем бизнес-уровне я использую сервис WCF. Экземпляр службы WCF также можно передать в конструктор. Вот конструкторы моего БЛ.

    private IWCFClient wcfClient;

    public MyBL()
        :this(new WCFClient())
    {

    }

    public MyBL(IWCFClient wcfClient)
    {
        serviceClient = wcfClient;
    }

, поскольку я объявляю свой wcfClient как интерфейс, я не получаю там метод .Close (). Я должен набрать его, чтобы закрыть как ((RealwCFClient)wcfClient).Close();

Есть ли способ закрыть мой клиент, не печатая его? Должен ли я выставить метод Close в моем интерфейсе?

Ответы [ 5 ]

3 голосов
/ 29 июня 2011

Приведите ваш объект к ICommunicationObject и затем .Close () it.

Обратите внимание, что Close () может вызвать исключение, в этом случае перехватить его и сделать .Abort ()

1 голос
/ 29 июня 2011

Вот ссылка на MSDN документ, касающийся закрытия клиента .

Вообще говоря, утилита dispose / close не должна выдавать исключение. Я использую метод расширения, который заключает в себе эту функцию,является довольно хорошей статьей, предоставляющей основную концепцию .

Мне нравятся глаголы Use или Execute для имени метода, а не Use, поскольку использование имеет оттенок вызова dispose, который делает большинство людейне ожидайте исключений из.

1 голос
/ 29 июня 2011

Вы можете реализовать IDisposable для своего класса и в своем методе Dispose закрыть экземпляр службы WCF.

public class Consumer
{
    public void SomeMethod()
    {
        using (WCFClient client = new WCFClient(new WCFService()))
        {
            int sum = client.Add(5, 10);
        }
    }
}

public class WCFClient : IDisposable
{
    private WCFService _service;

    public WCFClient(WCFService service)
    {
        _service = service;
    }

    public int Add(int a, int b)
    {
        return _service.Add(a, b);
    }

    public void Dispose()
    {
        if (_service != null)
            _service.Close();
    }
}

Блок using в методе SomeMethod () объекта Consumer гарантирует, что метод dispose для WCFClient будет вызываться при закрытии соединения со службой.

1 голос
/ 29 июня 2011

В дополнение к другим ответам, вы также должны рассмотреть создание многоразового клиента службы WCF . В этом многократно используемом клиенте вы можете обрабатывать открытия и закрытия и не заставлять потребляющий класс беспокоиться об этом.

0 голосов
/ 29 июня 2011

Пока все конкретные реализации IWCFClient будут иметь метод Close(), добавьте метод Close() в интерфейс.

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