[英]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>
)之外的任何其他方式一起工作。
State
屬性屬於IClientChannel
接口。 所以你可以這樣使用它: ((IClientChannel)proxy).State
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.