繁体   English   中英

我如何关闭 wcf 客户端

[英]how do i close wcf client

在我的业务层,我正在使用 WCF 服务。 WCF 服务实例也可以在构造函数中传递。 这是我的 BL 的构造函数。

    private IWCFClient wcfClient;

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

    }

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

因为我将我的 wcfClient 声明为接口,所以我没有 get.Close() 方法。 我必须将其类型转换为((RealwCFClient)wcfClient).Close();

有没有一种方法可以关闭我的客户而不进行类型转换? 我应该在我的界面中公开一个 Close 方法吗?

将您的 object 转换为ICommunicationObject然后.Close() 它。

请注意,Close() 可以抛出异常,在这种情况下捕获它并 do.Abort()

除了其他答案之外,您还应该考虑创建一个可重用的 WCF 服务客户端 在这个可重用的客户端中,您可以处理打开和关闭,而不用让消费 class 担心它。

您可以为您的 class 实现 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();
    }
}

Consumer 的 SomeMethod() 方法中的 using 块将确保调用 WCFClient 的 dispose 方法以关闭与服务的连接。

这是有关关闭客户端的 MSDN 文档的链接。

一般来说 dispose/close 不会抛出异常 我使用了一个封装这个功能的扩展方法,这里有一篇很好的文章提供了基本概念

我喜欢方法名称的动词 Use 或 Execute 而不是 Using,因为 using 具有调用 dispose 的含义,大多数人不希望出现异常。

只要IWCFClient的所有具体实现者都有Close()方法,然后将Close()方法添加到接口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM