2008-12-30 133 views
0

我怎样才能retuen一个对象从Web服务:返回对象从Webservice的

[的WebMethod] 公共数据集GetVendors(字符串数据库) { 的SqlConnection sqlConn =新的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); 
    } 

回答

1

如果我正确地解释你的问题,在DataSet填入您的最终目标与您的信息和返回类型设置为object。或者只是返回您填充为该对象的对象。

0

另一种方法是将数据集xml作为字符串返回并在客户端创建一个数据集。虽然我确信加密对象相当简单,但当我的Web服务需要加密时(序列化所有内容,加密该字符串,返回字符串,解密,反序列化),此方法帮助我解决了问题。

0

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

0

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

XML序列化不那么脆弱,因为它是平台不可知的,并且留下解组的怪癖,以便客户端解决。我建议通过返回一个对象。

0

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

0

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