【发布时间】:2015-03-11 12:30:37
【问题描述】:
我想澄清以下问题(如果这是一个愚蠢的问题,请提前道歉)
正在处理一些调用 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 实现,这是一个简单的案例吗?
【问题讨论】:
-
Dispose 调用 Close 内部。只需将代理放在
using块中 -
@PanagiotisKanavos 仅当通信失败时调用
Close抛出异常并且必须使用Abort。 -
对于 WCF 客户端来说,使用 using() 语句不是好的做法,因为它们可以在 Close() 操作中返回异常
-
是的,我在注意到 OP 正试图优雅地关闭之前发表了评论。
标签: c# web-services wcf