簡體   English   中英

為WCF ChannelFactory實現IDisposable <T>

[英]Implementing IDisposable for WCF ChannelFactory<T>

我們有一個Web服務,用於從網站獲取請求並從數據庫中提取數據以返回到網站。 這一切似乎都很好,但是自從我們開發它以來,一直有一些困擾我的東西。 我從客戶端建立與服務的連接的代碼如下:

string bindingName = ConfigurationManager.AppSettings["BindingName"];
ChannelFactory<IIntranet> factory = new ChannelFactory<IIntranet>(bindingName);
IIntranet proxy = factory.CreateChannel();

現在,代理公開了我界面中的所有方法,但是它沒有做的一件事就是實現IDisposable。 所以經過一些谷歌搜索后,我發現各種人都說我們必須實現界面,我做了如下:

public class Service : IInternet, IIntranet, IDisposable

IDisposable提供Dispose方法,如下所示:

public void Dispose()
{
    Dispose(true);
} 

dispose方法是我從互聯網上復制的方法,看起來像:

protected virtual void Dispose(bool disposing)
{
    if (disposing)
    {
        try
        {
            if (State != CommunicationState.Faulted)
            {
                Close();
            }
        }
        finally
        {
            if (State != CommunicationState.Closed)
            {
                Abort();
            }
        }
    }
}

現在我遇到的問題是編譯器不會將State,Close或Abort識別為有效關鍵字。 我可以解決國家問題,它會轉到System.Activities.Debugger,這對我來說似乎不對,其他人根本就沒有解決。

我已經包含System.ServiceModel,System.ServiceModel.Web和System.ServiceModel.Channels,這些似乎無法解決它。

所以我的問題是:

1)我是否正確地為上述場景實現IDisposable(網站創建服務連接以檢索數據)
2)如果是,那么如何解決Disposing方法中的錯誤?

任何幫助贊賞。

更新

僅供參考 - 我希望做的是以下內容:

using (IIntranet proxy = factory.CreateChannel())
{  
}

您是否復制了我的處置實施

在這種情況下,它意味着添加為visual studio中“add service reference”命令生成的someServiceClient類的部分內容。 它不適用於ChannelFactory<T>類。

也許可以為ChannelFactory<T>創建一個類似的解決方案,但代碼可能不會(正如您所知)與Wcf客戶端代理(繼承自ClientBase<T> )之外的任何其他方式一起工作。

  1. 從客戶端部署服務是錯誤的想法。 因為您無法控制何時處置您的服務。 正確的方法是在要關閉服務時從服務器端部署它。
  2. State屬性屬於IClientChannel接口。 所以你可以這樣使用它: ((IClientChannel)proxy).State

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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