2012-06-01 28 views
4

我在我的WCF服務中創建了一些數據類,以在服務和客戶端之間來回傳輸數據。因此,這些「對象」用[ServiceContract]和[DataMember]進行裝飾,從而暴露給客戶端,以便我可以實例化一個,填寫併發送給服務。現在,我注意到我可以在服務中使用多態,但我沒有在客戶和服務之間做這麼多運氣。例如是否可以使用SOAP對象的服務使用多態性?

在服務中,有一個名爲Ticket的類和一個名爲MOCTicket的類,它從Ticket派生。還有一種方法將Ticket作爲參數。通常情況下,我應該能夠發送該方法一個MOCTicket對象,並且它會正常工作,因爲它來自Ticket,並且我可以在該服務中執行此操作。但是,如果我在CLIENT端實例化MOCTicket對象並嘗試將其發送到接受Ticket的服務方法,則會引發錯誤。我猜這是一個序列化問題。

我對某種行爲感到困惑,我可以拿出這些數據類。你得到一些但不是其他人。就像我無法序列化行爲/方法或構造函數一樣,但我可以序列化一個延遲加載的屬性(或者看起來似乎)。無論如何,如果有人能夠幫助我實現我上面描述的或者可能的話。任何關於這些「對象」的額外澄清也將受到讚賞。我一直在努力尋找答案,但找不到足夠清晰的答案來回答這個問題。謝謝。

回答

1

我想我找到了我要找的東西,至少在這個階段。通過添加額外的裝飾到服務的方法,我可以告訴串行期待什麼類型:

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
    [ServiceKnownType(typeof(SvcBaseTicket))] 
    [ServiceKnownType(typeof(SvcMOCTicket))] 
    bool DoStuff(SvcBaseTicket user); 
} 

然後調用像這樣將工作:

using(var client = new MyClient()) 
{ 
    var ticket = new SvcMOCTicket(); 
    if(client.DoStuff(ticket)) 
    { 
     //do things 
    } 
} 

我測試,以確保服務類返回一個實際上是變相派生類的「基類」類型隨着所有附加屬性的出現而回歸,而且確實如此。伴隨着一個名爲「ExtensionData」的新屬性。 Wunderbar酒吧。

3

而不是將類傳遞到/從服務,您是否嘗試傳遞接口並使用ServiceKnownType屬性?

查看link舉例。

+0

該文章給了我一些想法,但它並沒有真正顯示發生了什麼事情,並且他的解決方案中的海報提供的鏈接已損壞:/。我會走這條路。在此期間的任何其他輸入是讚賞。 – Sinaesthetic

相關問題