【问题标题】:WCF method returns DataSet and table's rows are out of orderWCF 方法返回 DataSet 并且表的行无序
【发布时间】:2013-07-07 07:48:56
【问题描述】:

我有一个 WCF 服务,它返回一个包含 3 个数据表的数据集。前 2 个 DataTable 包含一些关于将要处理的数据的元数据,第 3 个 DataTable 包含要处理的主要数据。

在 99% 的客户端中,当从 web 服务调用中检索 DataSet 时,所有内容的顺序与发送 DataSet 之前服务器端的顺序完全相同。但是,在一些客户中,我注意到一些 DataTables 的行是乱序的。有谁知道为什么会发生这种情况?

另外,我确实知道每个人都说不要在 WCF 上使用 DataSets / DataTables 的原因,但对于这个项目来说,这是正确的方法,所以请不要链接到可怕的标题文章说 DataSets over WCF 是魔鬼.

为了解决这个问题,我想我可以在发送数据集之前将其转换为字节数组,然后再将其转换回另一端的数据集,或者我可以在使用之前在客户端对数据表进行排序,但我仍然想知道为什么会发生这种情况;特别是因为我无法在生产之外复制它。

【问题讨论】:

  • 一种可能性是发送的消息被乱序接收。如果您的客户端与您的服务通信的框架可以支持它,您可以引入可靠消息传递以确保从客户端接收消息的顺序与发送的顺序相同。 msdn.microsoft.com/en-us/library/aa480191.aspx
  • @GeorgeJohnston - 感谢您的回复;我也有同样的想法,但无法证明这一点,因为我无法重现它并且没有记录 SOAP 消息。我很欣赏这个链接。由于这不是公共 Web 服务,而且我一直都知道客户端将是一个 .NET C# 应用程序,因此我认为 Reliable Messaging 将是一个不错的选择。

标签: c# wcf web-services dataset


【解决方案1】:

您可以尝试通过获取 dataset.getXml() 并从客户端重建数据集来发送 XML。

Dataset To XMLXML to Dataset

【讨论】:

  • 您提供链接的文档说明了以下内容...“如果您使用模式推断构建数据集并使用 XML 或 Web 服务对其进行序列化,则列顺序可能会更改。”。我认为这首先是我的问题的原因,是我正在通过 WCF 发送一个 DataSet 并且它没有正确保持列的顺序,并且看起来如果你将它作为 XML 发送它是一样的事情可能会发生。虽然为链接 +1,但我认为它确实解释了为什么首先会出现问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多