首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过接口实例化WCF客户端的处理

通过接口实例化WCF客户端的处理
EN

Stack Overflow用户
提问于 2015-01-13 14:08:55
回答 1查看 1.2K关注 0票数 0

我想澄清以下几点(如果这是个愚蠢的问题,请提前道歉)

我正在处理一些调用WCF服务的现有代码。

此代码通过接口实例化WCF服务客户端,并执行它所需的操作,即:

代码语言:javascript
复制
IWCFService proxyClient = new WCFServiceClient()

然而,我在这里要做的是确保连接是优雅地关闭的,例如:proxyClient.Close()等,但我不能通过一个接口(它只包含操作,即:DoSomething())访问这些连接。

如果我实例化为WCF服务客户端(而不是通过接口),我将能够访问Close() & Abort调用,我可以在try{}catch{}块中使用这些调用。即:

代码语言:javascript
复制
WCFServiceClient proxyClient = new WCFServiceClient()
 //do some stuff..
proxyClient.Close()

在接口定义中添加Close() & Abort(),然后在代码中调用这些代码,从而实现这些定义的WCF实现,这是一种简单的情况吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-13 14:12:50

最近,我写了一篇关于正确处理WCF客户端生命周期的文章:仅将实例化封装在using块中是不够的。

看看http://blog.rsuter.com/?p=975

摘要:重载Dispose使用带有using关键字的客户端的方式如下:

代码语言:javascript
复制
public void Dispose()
{
    if (isDisposed)
        return;

    try
    {
        if (service.State == CommunicationState.Faulted)
            service.Abort();
        else
        {
            try
            {
                service.Close();
            }
            catch (Exception closeException)
            {
                try
                {
                    service.Abort();
                }
                catch (Exception abortException)
                {
                    throw new AggregateException(closeException, abortException);
                }
                throw;
            }
        }
    }
    finally
    {
        isDisposed = true;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27924045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档