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

时间:2015-01-13 14:08:55

标签: c# web-services wcf

我希望对以下内容有所了解(如果这是一个愚蠢的问题,请提前道歉)

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

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

IWCFService proxyClient = new WCFServiceClient()

然而,我在这里尝试做的是确保优雅地关闭连接,即:proxyClient.Close()等但我无法访问这些通过接口创建的视图(仅包含操作,即:DoSomething()

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

WCFServiceClient proxyClient = new WCFServiceClient()
 //do some stuff..
proxyClient.Close()

是否添加Close()& amp; abort()到接口定义,然后在代码中调用它们,而这些代码又要实现这些的WCF实现?

1 个答案:

答案 0 :(得分:0)

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

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

摘要:按以下方式重载Dispose以使用using关键字的客户端:

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;
    }
}