2014-04-15 46 views
1

在此輸入代碼我想用.asvc web服務發送動態類型。我有一門課有一些屬性。我想發送任何類型的對象,甚至在這個列表中的類。並回到客戶端。是否可以在Web服務中使用對象?

我的意思是我總是想用SysResult類型。但有時List<Apple>,有時List<Orrange>

像波紋管

[Serializable] 
    public class SysResult 
    { 
     public int CRCResult; 
     public long CRCTransactionId; 
     public bool CRCStatus; 
     public string CRCMessage; 
     public List<Anything> ListObject; 
    } 

我試着使用object[]ArrayList<object>dynamic等,但我得到這個錯誤。 「 」底層連接已關閉:連接意外關閉。「

順便說一句,對於所有非特定對象類型,服務參考類表示object[]類型。

[System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)] 
     public object[] ListObject { 
      get { 
       return this.ListObjectField; 
      } 
      set { 
       if ((object.ReferenceEquals(this.ListObjectField, value) != true)) { 
        this.ListObjectField = value; 
        this.RaisePropertyChanged("ListObject"); 
       } 
      } 
     } 

有沒有辦法發送動態類型?或者我想做一些完全錯誤的事情?

在此先感謝。

回答

1

你必須返回一個已知類型。它不能僅返回「對象」或甚至是一個接口。如果沒有數據合同,wcf如何知道如何在客戶端上序列化對象?

通常,傳遞參數和客戶端 和服務之間返回值時,兩個端點共享所有 數據的數據契約被髮送。但是,以下情況並非如此 的情況:

... 要傳輸的信息的聲明類型是Object。 由於每種類型都繼承自Object,並且它不能在 之前知道哪種類型實際發送,所以接收端點不能預先確定傳輸數據的數據協定。

http://msdn.microsoft.com/en-us/library/ms730167(v=vs.110).aspx

而且

你可以使用KnownTypes映射你的接口和對象。看看這個鏈接: WCF - Object as known type -> interoperable? WCF, Interface return type and KnownTypes

1

這可能讓你在這個問題上有所幫助手頭

WCF不支持使用業務操作泛型方法。換句話說,只有具體類型可用於服務 操作。打開的泛型類型不能使用。現在,重要的是 來澄清這不是WCF的限制。相反,它是WSDL的一個限制,用於向服務元數據提供服務元數據給用戶。 WSDL中沒有構造來定義通用的 類型。一般來說,我同意這種行爲,因爲它減少了客戶端和服務之間的耦合。

雖然不支持通用方法,但爲了交換數據​​,可能會公開通用對象。但是, 有一些限制。讓我們來仔細看看:

http://jeffbarnes.net/blog/post/2007/05/10/WCF-Serialization-and-Generics.aspx

相關問題