2014-03-19 220 views
0

我試圖主機那裏是返回以下類型的方法的服務:DataContractException在託管WCF服務

[DataContract] 
[Obfuscation(ApplyToMembers = true, Exclude = true)] 
[Serializable] 
public class Output 
{ 
    [DataMember] 
    public DataSet dsOutput{get;set;} 
} 

方法簽名如下:

[OperationContract] 
[WebGet] 
function Output matchData(DataSet pDSSide1,DataSet pDSSide2) 
{ 
    return new Output(); 
} 

在瀏覽服務我遇到以下異常:

System.InvalidOperationException:在調用WSDL ex時拋出異常端口擴展:System.ServiceModel.Description.DataContractSerializerOperationBehavior 合同:http://tempuri.org/:TesterTool ---->

System.Runtime.Serialization.InvalidDataContractException:類型 '的System.Data.DataRow' 不能被序列化。考慮使用DataContractAttribute屬性標記它,並使用DataMemberAttribute屬性標記要序列化的所有成員。如果類型是一個集合,請考慮使用CollectionDataContractAttribute來標記它。有關其他支持的類型,請參閱Microsoft .NET Framework文檔。 `

任何建議。

+0

是,不返回數據集,該框架將如何能夠解析所有可能的數據集? – Jocke

回答

1

通過服務發送數據表不是一個好習慣。

如前所述通過govindaraj here

最好的方法是使用自定義對象的自定義集合。

如果您使用的是2.0,那麼您可以使用泛型集合而不是 自定義集合來減少代碼。

怎麼樣?

  1. 創建自定義數據對象(只包含私有字段和每個字段的公共屬性),它類似於在 數據表的每一行。

  2. 創建一個將執行所有數據庫(在這種情況下,數據集)訪問和翻譯到自定義對象的圖層。

  3. 所有客戶端代碼將訪問該層。

+0

當複製他人的話時,你絕對必須像上面所做的那樣提供歸屬。請務必在將來做到這一點。 –