2008-09-22 73 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()以来的所有编辑。这应该有助于减少网络流量。

相关问题