我有一些WCF服務:WCF:如何使用DataContractSerializer序列化DataTable?
[ServiceContract(SessionMode = SessionMode.Allowed)]
public interface IMyService
{
[OperationContract]
[TransactionFlow(TransactionFlowOption.Allowed)]
FooResult GetFoo([NotNull] FooRequest request);
}
[DataContract(Name = "FooRequest", Namespace = "...")]
public class FooRequest
{
[DataMember(IsRequired = true)]
[NotNull]
public DateTime From { get; set; }
}
,該業務SvcUtil工具生成,通過DataContractSerializer的序列化類型。現在,我想補充方法返回的DataTable:
[OperationContract]
[TransactionFlow(TransactionFlowOption.Allowed)]
[FaultContract(typeof(IikoNetServiceFault))]
System.Data.DataTable GetDataTable();
現在svcutils生成序列化的所有類型的XmlSerializer的類型。但是我需要所有類型(包括DataTable)都由DataContractSerializer序列化,或者只有DataTable由XmlSerializer序列化,但其他類型由DataContractSerializer序列化。
通常,將DataTable作爲服務的輸出發送,太多的額外數據並不是一個好主意。會更好地創建一些數據傳輸對象。這很可能也解決了序列化問題。 – ElDog
對於相同的服務,您不能擁有兩個序列化引擎。 SOA對DataTable沒有任何瞭解。服務的不兼容性與語言無關,PHP或Python會對您的DataTable執行什麼操作? :)更好地使用ElDog所說的數據傳輸對象。 – Artru
即使我完全同意@ElDog,POCO通常應該在服務合同中被優先考慮,但我必須指出,WCF不僅僅是關於可互操作的服務,而是構建分佈式系統的通用技術。如果已知客戶端基於.NET,只要[它們可以被序列化],我在服務合同中看不到使用.NET特定類型的問題(http://msdn.microsoft.com/ EN-US /庫/ aa347876.aspx)。 –