【问题标题】:Web Service Method Can't return a DataTable?Web 服务方法不能返回数据表?
【发布时间】:2011-05-25 13:14:56
【问题描述】:

这是Web服务方法:

[WebMethod]
[SoapHeader("m_Token", Direction = SoapHeaderDirection.InOut)]
public DataTable GetUserProfile()

这是我用来调用此方法的代码行:

DataTable DT = (DataTable) m_ServerApp.GetUserProfile();

这是编译器抛出的错误:

无法转换类型 'WSAClient.ServerApp.GetUserProfileResponseGetUser ProfileResult' 到 'System.Data.DataTable'

有什么问题?谢谢..

【问题讨论】:

  • 哪些 API 有哪些版本?这应该适用于老式的 asmx WebServices,而不是 WCF。
  • 好吧,我认为异常很容易解释——类型不匹配。另一件事是,在我看来,将数据表作为 Web 服务方法结果返回是不好的做法,因为对于非 .net 系统来说这很难理解,我会选择自己的更具体的数据结构。
  • 向我们展示 ProfileResult 的结构。

标签: c# web-services proxy asmx


【解决方案1】:

如果您的 web 服务正在被 java 客户端使用,那么您将违反 Soap 标准,那么它将无法使用您的 web 服务。最好返回一个 XML,这又是一个肥皂标准,在客户端,你可以在数据集中读取这个 xml,并且可以使用数据集的数据表

【讨论】:

    【解决方案2】:

    您的客户端代理方法正在返回WSAClient.ServerApp.GetUserProfileResponse.GetUserProfileResult 类型的对象。你可能会发现这个类型包含你的DataTable

    我同意您不应返回特定于 .NET 的类型。 Java 客户端无法理解 System.Data.DataTable 是什么,就像 .NET 客户端无法理解 Java Map 一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      • 1970-01-01
      • 2015-11-25
      • 2014-06-28
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      相关资源
      最近更新 更多