簡體   English   中英

我如何關閉 wcf 客戶端

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM