处理通过接口实例化的 WCF 客户端
Disposing of a WCF client instantiated via an interface
我想澄清以下问题(如果这是一个愚蠢的问题,请提前致歉)
正在处理一些调用 WCF 服务的现有代码。
此代码通过接口实例化 WCF 服务客户端并执行其所需的操作,即:
IWCFService proxyClient = new WCFServiceClient()
然而,我在这里尝试做的是确保连接正常关闭,即:proxyClient.Close()
等,但我无法访问这些,因为它是通过接口创建的(它只包含操作,即:DoSomething()
)
如果我实例化为 WCF 服务客户端(而不是通过接口),我将能够访问我可以在 try{}catch{} 块中使用的 Close() 和 Abort 调用。
即:
WCFServiceClient proxyClient = new WCFServiceClient()
//do some stuff..
proxyClient.Close()
将 Close() 和 Abort() 添加到接口定义,然后在代码中调用它们是否是一个简单的例子,代码又应该实现这些的 WCF 实现?
我最近写了一篇关于正确处理 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;
}
}
我想澄清以下问题(如果这是一个愚蠢的问题,请提前致歉)
正在处理一些调用 WCF 服务的现有代码。
此代码通过接口实例化 WCF 服务客户端并执行其所需的操作,即:
IWCFService proxyClient = new WCFServiceClient()
然而,我在这里尝试做的是确保连接正常关闭,即:proxyClient.Close()
等,但我无法访问这些,因为它是通过接口创建的(它只包含操作,即:DoSomething()
)
如果我实例化为 WCF 服务客户端(而不是通过接口),我将能够访问我可以在 try{}catch{} 块中使用的 Close() 和 Abort 调用。 即:
WCFServiceClient proxyClient = new WCFServiceClient()
//do some stuff..
proxyClient.Close()
将 Close() 和 Abort() 添加到接口定义,然后在代码中调用它们是否是一个简单的例子,代码又应该实现这些的 WCF 实现?
我最近写了一篇关于正确处理 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;
}
}