2008-09-22 76 views
7

我應該從Web服務暴露一個強類型的數據集,並直接綁定到客戶端?或者是否有更合理的asmx web服務方式?我正在做CRUD操作(創建,讀取,更新,刪除)。我應該從webservice返回一個強類型的數據集嗎?

我發現使用數據集令人沮喪並且難以處理,例如當插入到其中的一個表中時。當僅插入一條記錄或僅從數據集中的特定表中獲取一條記錄時,將整個數據集來回傳送似乎不合邏輯。

有沒有更好的方法?

我是否應該轉換爲對象並通過webservice使用對象?在各處進行轉換以獲取對象傳遞的內容也許同樣乏味?

回答

4

這取決於您的互操作性要求。雖然完全有可能在幾乎任何環境下處理DataSet XML,但它可能難以實現。如果你不是互操作的,我肯定會推薦類型化的數據集路由,因爲從C#和「just works」中使用它非常簡單。

2

請注意,Dataset是特定於.NET的。如果你想讓你的API可以互操作,你應該堅持基本的數據類型和構造(否則,這種情況對於非.NET開發者來說可能是麻煩的)。

然後,Web服務不是爲了在單次旅行中傳遞大型對象而設計的。如果您的數據集包含超過幾百KB,則很可能會以客戶端或服務器端HTTP超時結束(考慮默認設置)。

對於CRUD操作,我只是建議直接通過WS公開每個操作。

0

我同意Joannes ...堅持使用對象和特定的方法來表達你想要暴露的操作類型。

+0

如果你剛剛發佈的同意,你爲什麼不只是upmod而已? – 2008-09-22 18:38:01

3

我會說選擇對象,DataSet的可能會有點混亂。對象可以更清晰地查看,當然也可以調試。

使用抽象類型時要小心,儘管如果您有基於抽象類/接口的集合,它們可能會有點痛苦,無法序列化。我過去遇到過這個問題,但是,我found a solution

2

我對DataSet有很大的成功(服務器使用並返回一個強類型數據集,而客戶端將它作爲標準數據集使用)。像Tomer警告的那樣,我沒有互操作性問題。

關於更新,發送整個數據集是一個壞主意。 DataSet和DataTable對象上有一個名爲GetChanges()的方法,它將返回自調用AcceptChanges()以來的所有編輯。這應該有助於減少網絡流量。

相關問題