2008-12-30 152 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服務。