2013-02-27 44 views
0

我是WCF新手。我對從WCF方法返回數據有一個疑問。我們是否可以從WCF方法返回SqlDataReader或DataTable

我們可以從WCF方法返回SqlDataReader或DataTable對象嗎?

感謝

+1

你*可以* - 但這並不意味着你*應該*! WCF適用於返回**具體對象**(或對象集合) - 不應該使用'DataTable'(大量開銷,.NET特定),絕對不是'SqlDataReader'(打開連接,通過WCF傳輸) – 2013-02-27 09:15:04

+0

WCF服務應該完全獨立於調用者 - 所以*通過使用'SqlDataReader'返回一個打開的連接來將*調用者連接到服務是一個**非常糟糕的主意** ....不這樣做.. – 2013-02-27 09:28:56

回答

0

是的,你可以,但一個DataTable具有很大的開銷,您不妨考慮一下寫實體的名單,並通過這個列表

這使我更煩惱這樣

+0

確定我同意返回DataTable或SqlDataReader是一個不好的做法,但如果我們可以請你告訴我如何才能返回知識 – Sukhjeevan 2013-02-27 09:37:37

+0

與任何函數一樣:public DataTable GetMyData(){return new DataTable} – 2013-02-27 09:50:15

+0

我做了同樣的事情,錯誤:底層連接已關閉:連接意外關閉。 – Sukhjeevan 2013-02-28 06:34:29

0

您應該創建一個新對象,然後返回這些對象的集合。像這樣的東西。

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; 

如果您需要更多的說明,我們可以將其餘部分數字化,我將展開在我的答案。希望這可以幫助。

0

是的,100%你可以返回任何由.net支持的返回類型。但是唯一的事情是WCF非常靈活,所以WCF的客戶端總是不是100%.net框架。它也可以被Java消費。和java returntype不是100%等同於.net returntype,所以你需要關心它。 例如,通用列表默認情況下在客戶端轉換爲可觀察集合。

相關問題