从Webservice返回对象

时间:2008-12-30 15:07:40

标签: sql web-services

如何从Web服务返回Object:

[WebMethod] public DataSet Get Vendors(string database){SqlConnection sqlConn = new SqlConnection();

        sqlConn.ConnectionString = GetConnString(Database);

        // build query
        string strSQL = @"  SELECT      [No_] AS [VendorNo],
                                        LTRIM([Name]) AS [VendorName]

                            FROM        [********_$Vendor]

                            WHERE       LEN(RTRIM([Name])) > 0 /* avoid blank names */

                            AND         [Vendor Posting Group] = 'VEND'

                            ORDER BY    LTRIM([Name]) ASC; /* LTRIM fixes spaces before name */ ";

        SqlDataAdapter da = new SqlDataAdapter(strSQL, sqlConn);

        DataSet ds = new DataSet();

        da.Fill(ds, "Vendors");

        return (ds);
    }

6 个答案:

答案 0 :(得分:1)

如果我正确解释您的问题,请在DataSet中使用您的信息填写您最终的对象,并将您的返回类型设置为object。或者只返回您作为该对象填充的对象。

答案 1 :(得分:0)

另一种方法是将数据集xml作为字符串返回,并在客户端从中创建数据集。

虽然我确信加密对象会相当简单,但是当我的Web服务需要加密(序列化所有内容,加密字符串,返回字符串,解密,反序列化)时,这种方法帮助我解决了问题。

答案 2 :(得分:0)

如果你问的是如何返回任何类型的对象,而不是Object,那么你将需要序列化该对象。如果您尝试序列化DataSet,我建议您首先将其设置为List或其他数据结构。

答案 3 :(得分:0)

对我来说似乎很脆弱。它假定客户端将知道如何反序列化该对象,这将客户端锁定到特定平台(例如Java EE或.NET)。

XML序列化不那么脆弱,因为它与平台无关,并且留下了由客户端解决的解组问题。我建议过去回一个物体。

答案 4 :(得分:0)

不返回DataSet的另一个原因是“漏洞抽象”:为什么要将客户端暴露给与持久层有关的任何事情?反思它。

答案 5 :(得分:0)

IMO从您的网络服务返回数据集并不是一个好主意。它假定客户端了解数据集,DataTable等数据结构和类。相反,我建议您使用普通的CLR对象,即数据传输对象,或者如果您愿意,可以使用XmlNode作为您的数据类型。您可以使用WSE保护您的Web服务。