我正在編寫一個WCF webservice並傳入一個複雜類型作爲該方法的參數。複雜類型看起來像這樣:WCF - 無法創建抽象類
[DataContract(Namespace = "")]
public class MyRequest
{
[DataMember()]
public string TransactionId { get; set; }
[DataMember(IsRequired = true)]
public bool IsRollback { get; set; }
[DataMember(IsRequired = true)]
public OrderType OrderType { get; set; }
[DataMember(IsRequired = true)]
public ICustomerId CustomerId { get; set; }
[DataMember()]
public long OrderId { get; set; }
[DataMember()]
public AnotherComplexType PurchaseInfo { get; set; }
的web服務方法看起來像這樣:
[ServiceKnownType(typeof(CustomerIdByName))]
[ServiceKnownType(typeof(CustomerIdByAccount))]
public OrderResult Execute(MyRequest order) {
}
界面看起來像這樣:
[KnownType(typeof(CustomerIdByAccount))]
[KnownType(typeof(CustomerIdByName))]
public interface ICustomerId{
string GetId();
}
當我讓使用SOAP端的請求點,一切都很好。但是,當將請求傳遞給REST端點時,會出現序列化錯誤。
這是我使用
<MyRequest>
<CustomerId>
<AccountId>59251</AccountId>
</CustomerId>
<IsRollback>false</IsRollback>
<OrderId>0</OrderId>
<OrderType>OrderSubscription</OrderType>
<PurchaseInfo>
<ObjectId>196521</ObjectId>
</PurchaseInfo>
<TransactionId>ABC123</TransactionGuid>
</MyRequest>
因爲我一直停留在這一點上太久的要求,我再變ICustomerId成員是實現ICustomerId一個抽象類。 SOAP端點再次正常工作,但將請求發送到其餘端點,我得到一個錯誤,指出「無法創建抽象類」
我在這裏丟失或做錯了什麼?
這是否失敗,因爲接口嵌套在複雜類型中,而不是webservice方法的直接參數?我已經使用接收接口作爲參數的webservices,並使用它們工作的KnownType裝飾器就好了。同樣的問題適用於抽象類,這是不是工作,因爲抽象類嵌套在MyRequest複雜類型的成員內?
這是錯誤消息我得到:從命名空間
元客戶ID不能有小孩內容被反序列化的對象。請使用XmlNode []來反序列化這種模式的XML
'OrderResult執行(OrderRequest順序)'不返回任何東西。另外,'MyRequest'是否實現了'IMyRequest'支持的所有內容? – Matthew
有沒有關於兒童的數據合同/ datamember? – Cybermaxs
我有一個擴展抽象CustomerId的具體類。它被稱爲「CustomerIdByAccount」,它有一個公共屬性「AccountId」。我使用示例XML更新了問題,用於請求 – user1552485