我有一個 WCF 客戶端,它已通過我的 MVC 4 專案控制器上的介面實體化,如下所示:
private readonly ILMS_Service lms_client;
public ProductsController(ILMS_Service client)
{
lms_client = client;
}
public ProductsController()
{
lms_client = new LMS_ServiceClient();
}
我可以從客戶端訪問操作合同,但我在此實作中注意到的是,沒有.Open()
我.Close()
通常使用LMS_Client lms_client = new LMS_ServiceClient();
. 我不能使用這種傳統方式初始化 WCF 客戶端,因為我需要能夠從我的單元測驗中傳遞模擬 WCF 客戶端。有了這個,我必須通過它的介面初始化 WCF 客戶端,并且必須在我測驗時創建一個建構式來傳遞模擬服務。
如果我錯了,請糾正我,但我找到了這篇文章,但是它沒有告訴我在哪里實作該Dispose()
方法(例如到控制器或.svc
WCF 專案的檔案上?)。而且我認為這個答案似乎沒有考慮單元測驗。它似乎為 WCF 上的方法的每次呼叫實作了介面;其中,它是不可模仿的。另外,我還找到了這個最接近我的場景的博客,但是這是通過解構式關閉連接的好方法嗎?你在哪里實作它?在呼叫方法的控制器上或.svc
WCF 專案的檔案上?
如果有人可以啟發我或通過示例向我展示打開/關閉與此實作的 WCF 客戶端連接的好方法,那就太好了。任何幫助,將不勝感激。謝謝!
uj5u.com熱心網友回復:
我認為您可以按照 Microsoft 檔案的建議使用 close 和 abort 來釋放 wcf 客戶端資源。 https://learn.microsoft.com/en-us/dotnet/framework/wcf/samples/use-close-abort-release-wcf-client-resources
try
{
...
client.Close();
}
catch (CommunicationException e)
{
...
client.Abort();
}
catch (TimeoutException e)
{
...
client.Abort();
}
catch (Exception e)
{
...
client.Abort();
throw;
}
您提供的第一個鏈接基本上是為 WCF 客戶端創建一個部分類,然后繼承 Dispose 方法。
有關詳細資訊,您可以查看檔案:
https ://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/implementing-dispose
uj5u.com熱心網友回復:
如果您通過介面使用它,我找到了一種關閉 WCF 服務連接的方法。您可以Dispose
在類上使用該方法并將 WCF 服務介面轉換為實際實作。
private readonly ILMS_Service lms_client;
public ProductsController(ILMS_Service client)
{
lms_client = client;
}
public ProductsController()
{
lms_client = new LMS_ServiceClient();
}
protected override void Dispose(bool disposing)
{
if (disposing) {
var clientObject = lms_client as LMS_ServiceClient;
if (clientObject != null && clientObject.State == System.ServiceModel.CommunicationState.Opened)
{
clientObject.Close();
}
}
}
關閉 WCF 連接時,建議您按照@Lan Huang 的回答或@Rico Sutter 的回答在這里,同樣可以在@Rico Sutter 的博客上找到
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/522032.html
上一篇:如何在VisualStudio中使用MVC.Net專案以使用無密碼連接字串連接到AzureSQL資料庫
下一篇:將資料從一個表拆分到另一個表