我希望对以下内容有所了解(如果这是一个愚蠢的问题,请提前道歉)
正在处理一些调用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实现?
答案 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;
}
}