我是否应该从Web服务公开强类型数据集并将其直接绑定在客户端中?或者是否有更合理的方式来提供asmx Web服务?我正在做CRUD操作(创建,读取,更新,删除)。
我发现使用数据集会让人感到沮丧,并且难以在例如插入其中的表时使用。当仅插入一条记录或仅从数据集中的特定表中获取一条记录时,将整个数据集来回传送似乎不合逻辑。
有更好的方法吗?
我是否应该通过Web服务转换为对象并使用对象?在整个地方进行转换以获取传递的对象可能同样乏味?
答案 0 :(得分:4)
这取决于您的互操作性要求。虽然完全可以从几乎任何环境处理DataSet XML,但它可能会变得非常难以理解。如果您没有互操作性,我肯定会推荐使用类型化数据集路由,因为从C#中使用它并且“只是工作”非常简单。
答案 1 :(得分:3)
我会说选择对象,DataSet可能会变得有点混乱。查看对象可以更清晰,当然还有调试。
使用抽象类型时要小心,因为如果你有基于抽象类/接口的集合,序列化会有点麻烦。我过去遇到过这方面的问题,但我是found a solution。
答案 2 :(得分:2)
请注意Dataset特定于.NET。如果你想让你的API可以互操作,你应该坚持使用基本数据类型和结构(否则,非.NET开发人员的情况可能很麻烦)。
然后,Web服务不是为了在一次旅行中传递大型对象而设计的。如果您的数据集包含的数据量超过几百KB,则可能最终会出现客户端或服务器端HTTP超时(考虑默认设置)。
对于CRUD操作,我只是建议直接通过WS公开每个操作。
答案 3 :(得分:2)
我在DataSet上取得了巨大成功(服务器使用并返回强类型数据集,而客户端将其作为标准数据集使用)。就像Tomer警告的那样,我没有互操作性问题。
关于更新,发送整个数据集是一个坏主意。 DataSet和DataTable对象上都有一个名为GetChanges()的方法,它将返回自调用AcceptChanges()以来的所有编辑。这可以帮助您减少网络流量。
答案 4 :(得分:1)
与此主题相关的一些链接
scott hanselman - Returning DataSets from WebServices is the Spawn of Satan and Represents All That Is Truly Evil in the World
rockford lhotka - Thoughts on passing DataSet objects via web services
4guysfromrolla - More On Why I Don't Use DataSets in My ASP.NET Applications
答案 5 :(得分:0)
我同意Joannes ......坚持使用对象和特定方法来处理您想要公开的操作类型。