2012-01-25 21 views
2

這如何作爲WCF服務工作?WCF通用類

public class BusinessObject<T> where T : IEntity 
{ 
    public T Entity { get; set; } 

    public BusinessObject(T entity) 
    { 
     this.Entity = entity; 
    } 
} 

public interface IEntity { } 

public class Student : IEntity 
{ 
    public int StudentID { get; set; } 
    public string Name { get; set; } 
} 

我要揭露的BusinessObject的<牛逼>類和所有繼承了WCF服務的IEntity接口的類。

我的代碼是使用C#.NET Framework 4.0構建在Visual Studio 2010 Pro中。

回答

6

在通過WCF將BusinessObject公開給客戶端時,必須通過使用封閉泛型類型來實現這一點。

[DataContract] 
public class BusinessObject<T> where T : IEntity 
{ 
    [DataMember] 
    public T Entity { get; set; } 

    public BusinessObject(T entity) 
    { 
     this.Entity = entity; 
    } 
} 

[ServiceContract] 
interface IMyContract { 
[OperationContract] 
BusinessObject<Student> GetStudent(...) // must be closed generic 
} 
+0

但是學生不是T型的唯一類型。我有許多實體類。 –

+0

我現在明白了,但是我需要爲所有實體類添加DataContract和DataMember屬性嗎? –

+0

WCF的面向服務的性質不會允許這樣做。從客戶角度思考。到客戶打電話時,合同應該是衆所周知的。 – chandmk

1

您需要在主機上註冊DataContractResolver行爲,以便WCF可以(de)動態地序列化尚未知的類型。這裏查看更多信息:

http://msdn.microsoft.com/en-us/library/ee358759.aspx

儘管如此,仍類型需要關閉泛型類型,雖然是一個公共基類AFAIK。