[英]how do i close wcf client
在我的业务层,我正在使用 WCF 服务。 WCF 服务实例也可以在构造函数中传递。 这是我的 BL 的构造函数。
private IWCFClient wcfClient;
public MyBL()
:this(new WCFClient())
{
}
public MyBL(IWCFClient wcfClient)
{
serviceClient = wcfClient;
}
因为我将我的 wcfClient 声明为接口,所以我没有 get.Close() 方法。 我必须将其类型转换为((RealwCFClient)wcfClient).Close();
有没有一种方法可以关闭我的客户而不进行类型转换? 我应该在我的界面中公开一个 Close 方法吗?
将您的 object 转换为ICommunicationObject
然后.Close() 它。
请注意,Close() 可以抛出异常,在这种情况下捕获它并 do.Abort()
除了其他答案之外,您还应该考虑创建一个可重用的 WCF 服务客户端。 在这个可重用的客户端中,您可以处理打开和关闭,而不用让消费 class 担心它。
您可以为您的 class 实现 IDisposable 并在您的 Dispose 方法中关闭 WCF 服务实例。
public class Consumer
{
public void SomeMethod()
{
using (WCFClient client = new WCFClient(new WCFService()))
{
int sum = client.Add(5, 10);
}
}
}
public class WCFClient : IDisposable
{
private WCFService _service;
public WCFClient(WCFService service)
{
_service = service;
}
public int Add(int a, int b)
{
return _service.Add(a, b);
}
public void Dispose()
{
if (_service != null)
_service.Close();
}
}
Consumer 的 SomeMethod() 方法中的 using 块将确保调用 WCFClient 的 dispose 方法以关闭与服务的连接。
这是有关关闭客户端的 MSDN 文档的链接。
一般来说 dispose/close 不会抛出异常 我使用了一个封装这个功能的扩展方法,这里有一篇很好的文章提供了基本概念。
我喜欢方法名称的动词 Use 或 Execute 而不是 Using,因为 using 具有调用 dispose 的含义,大多数人不希望出现异常。
只要IWCFClient
的所有具体实现者都有Close()
方法,然后将Close()
方法添加到接口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.