[英]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.