我是WCF新手。我對從WCF方法返回數據有一個疑問。我們是否可以從WCF方法返回SqlDataReader或DataTable
我們可以從WCF方法返回SqlDataReader或DataTable對象嗎?
感謝
我是WCF新手。我對從WCF方法返回數據有一個疑問。我們是否可以從WCF方法返回SqlDataReader或DataTable
我們可以從WCF方法返回SqlDataReader或DataTable對象嗎?
感謝
是的,你可以,但一個DataTable具有很大的開銷,您不妨考慮一下寫實體的名單,並通過這個列表
這使我更煩惱這樣
確定我同意返回DataTable或SqlDataReader是一個不好的做法,但如果我們可以請你告訴我如何才能返回知識 – Sukhjeevan 2013-02-27 09:37:37
與任何函數一樣:public DataTable GetMyData(){return new DataTable} – 2013-02-27 09:50:15
我做了同樣的事情,錯誤:底層連接已關閉:連接意外關閉。 – Sukhjeevan 2013-02-28 06:34:29
您應該創建一個新對象,然後返回這些對象的集合。像這樣的東西。
public class Thing
{
public int ID { get; set; }
public string Name { get; set; }
}
那麼跟你的數據表/閱讀器,你可以使用LINQ或迭代來創建一個集合:
粗糙須藤代碼:
Initialise List for Thing
foreach var v in DataTable
{
List<Thing>.Add(new Thing(){ ID = v.ID, Name = v.Name });
}
return List
或者,你可以使用LINQ:
List<Thing> theList = DataTable.Select(x => new Thing { ID = x.ID, Name = x.Name });
return theList;
如果您需要更多的說明,我們可以將其餘部分數字化,我將展開在我的答案。希望這可以幫助。
是的,100%你可以返回任何由.net支持的返回類型。但是唯一的事情是WCF非常靈活,所以WCF的客戶端總是不是100%.net框架。它也可以被Java消費。和java returntype不是100%等同於.net returntype,所以你需要關心它。 例如,通用列表默認情況下在客戶端轉換爲可觀察集合。
你*可以* - 但這並不意味着你*應該*! WCF適用於返回**具體對象**(或對象集合) - 不應該使用'DataTable'(大量開銷,.NET特定),絕對不是'SqlDataReader'(打開連接,通過WCF傳輸) – 2013-02-27 09:15:04
WCF服務應該完全獨立於調用者 - 所以*通過使用'SqlDataReader'返回一個打開的連接來將*調用者連接到服務是一個**非常糟糕的主意** ....不這樣做.. – 2013-02-27 09:28:56