我想澄清以下几点(如果这是个愚蠢的问题,请提前道歉)
我正在处理一些调用WCF服务的现有代码。
此代码通过接口实例化WCF服务客户端,并执行它所需的操作,即:
IWCFService proxyClient = new WCFServiceClient()然而,我在这里要做的是确保连接是优雅地关闭的,例如:proxyClient.Close()等,但我不能通过一个接口(它只包含操作,即:DoSomething())访问这些连接。
如果我实例化为WCF服务客户端(而不是通过接口),我将能够访问Close() & Abort调用,我可以在try{}catch{}块中使用这些调用。即:
WCFServiceClient proxyClient = new WCFServiceClient()
//do some stuff..
proxyClient.Close()在接口定义中添加Close() & Abort(),然后在代码中调用这些代码,从而实现这些定义的WCF实现,这是一种简单的情况吗?
发布于 2015-01-13 14:12:50
最近,我写了一篇关于正确处理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;
}
}https://stackoverflow.com/questions/27924045
复制相似问题