2013-12-11 40 views
1

我已經使用封閉泛型返回類型創建了WCF服務操作。我希望引用封閉泛型,因爲它是設計時間名稱,而不是運行時間名稱。例如WCF服務在封閉通用返回類型中的操作在客戶端中不可見

服務

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
    Food<BurritoKinds> GetBurrito(); 
} 

[DataContract] 
public class Food<T> 
{ 
    public T Detail { get; set; } 
} 

[DataContract] 
public enum BurritoKinds 
{ 
    [EnumMember] 
    Bean, 
    [EnumMember] 
    Beef 
} 

public class Service1 : IService1 
{ 
    public Food<BurritoKinds> GetBurrito() 
    { 
     return new Food<BurritoKinds> { Detail = BurritoKinds.Beef }; 
    } 
} 

而且客戶

static void Main(string[] args) 
    { 
     var client = new Service1Client(); 
     Food<BurritoKinds> burrito = client.GetBurrito();   //Compile Error 
     FoodOfBurritoKindsSSCqoCp1 burrito2 = client.GetBurrito();//Works Fine 
    } 

我想用Food<BurritoKinds>,而不必引用類型時使用FoodOfBurritoKindsSSCqoCp1。我錯過了什麼來允許這樣做,或者有可能沒有創建一個新的DLL只是爲了保存Generic並與服務和客戶端共享它?謝謝。

回答

0

檢查http://jeffbarnes.net/blog/post/2007/05/10/WCF-Serialization-and-Generics.aspx Jeff Barnes指出wsdl(而不是wcf)限制了泛型的使用:對消費者來說,它們總是表現爲具體類型。不過,您的.Net代碼中的泛型可能會產生不同的具體類型,就像您的FoodOfBurritoKindsSSCqoCp1類型一樣。請注意,use可以使用DataContract屬性指定生成類型的名稱,例如[DataContract(Name =「FoodOf {0}」],這應導致消費者在wsdl中的FoodOfBurritoKinds。

相關問題