如何从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);
}
答案 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服务。