天天看點

WCF項目中出現常見錯誤的解決方法:基礎連接配接已經關閉: 連接配接被意外關閉

在我們開發WCF項目的時候,常常會碰到一些莫名其妙的錯誤,有時候如果根據它的錯誤提示資訊,一般很難定位到具體的問題所在,而由于WCF服務的特殊性,調試起來也不是那麼友善,是以往往會花費不少時間來進行跟蹤處理。本文介紹我在我在我的架構裡面使用WCF服務的時候,出現的一個常見錯誤的處理方法,它的提示資訊是:基礎連接配接已經關閉: 連接配接被意外關閉。這種情況我碰到的有兩種,一種是傳回DataTable的時候出現的,一種是傳回實體類類中帶有枚舉類型的情況,下面分别對它們的處理進行介紹。 

一般情況下,我們在設計WCF接口傳回值的時候,都使用實體類或者實體類清單這種方式,但是有時候也可能需要傳回一個DataTable的資料類型,如果按照下面的方式構造函數内容并傳回,就可能出現錯誤。

定義接口

實作函數,為了友善示範,填寫了簡單的測試代碼。

測試的時候,會發現出現錯誤

WCF項目中出現常見錯誤的解決方法:基礎連接配接已經關閉: 連接配接被意外關閉

如果你按照它的提示,你可能搔破頭皮也不知道具體是哪裡的問題,這個地方其實很有意思,就是因為序列号DataTable的時候,沒有TableName導緻的,如果把函數體的實作裡面,為傳回的DataTable對象的TableName屬性指派一個值就可以了。

測試之後,就發現能夠順利執行了。

WCF項目中出現常見錯誤的解決方法:基礎連接配接已經關閉: 連接配接被意外關閉

 實體類定義,定義了一個枚舉的對象ApplyStatus

枚舉的定義一般情況如果設定如下代碼:

然後定義WCF服務接口和實作代碼。

WCF接口定義

WCF服務接口實作

那麼通過WCF服務擷取這個對象的資訊時候,就會出現錯誤:基礎連接配接已經關閉: 連接配接被意外關閉

WCF項目中出現常見錯誤的解決方法:基礎連接配接已經關閉: 連接配接被意外關閉

 出現錯誤的原因,是因為枚舉類型序列化出現了錯誤,需要在枚舉的值裡面增加[EnumMember]的聲明,如下所示。

再次編譯運作并測試,最後的結果就是能夠正常解析了。

WCF項目中出現常見錯誤的解決方法:基礎連接配接已經關閉: 連接配接被意外關閉

以上就是我們在開發WCF的時候,經常碰到的一些錯誤的解決方式,希望大家在開發WCF并進行調用的時候,碰到類似的問題,能夠很好解決問題,節省寶貴的時間。