2010-05-04 101 views
0

我有一個報告服務實現了許多報告。每份報告都需要某些參數。邏輯相關的參數組被放置在一個接口,該報告然後實現:在WCF/SOA中測試接口實現

[ServiceContract] 
[ServiceKnownType(typeof(ExampleReport))] 
public interface IService1 
{ 
    [OperationContract] 
    void Process(IReport report); 
} 

public interface IReport 
{ 
    string PrintedBy { get; set; } 
} 

public interface IApplicableDateRangeParameter 
{ 
    DateTime StartDate { get; set; } 

    DateTime EndDate { get; set; } 
} 

[DataContract] 
public abstract class Report : IReport 
{ 
    [DataMember] 
    public string PrintedBy { get; set; } 
} 

[DataContract] 
public class ExampleReport : Report, IApplicableDateRangeParameter 
{ 
    [DataMember] 
    public DateTime StartDate { get; set; } 

    [DataMember] 
    public DateTime EndDate { get; set; } 
} 

的問題是WCF的DataContractSerializer不會在我的客戶端庫公開這些接口,所以我不能寫通用報表生成我計劃的前端。 WCF可以暴露這些接口,還是這是串行器的限制?如果是後一種情況,那麼這種面向對象模式的規範方法是什麼?

我看了一下NetDataContractSerializer,但它似乎不是官方支持的實現(這意味着它不是我的項目中的一個選項)。目前,我已經辭去了將自己的接口包含在服務和客戶端應用程序之間通用的庫中,但這對我來說似乎是一種不必要的額外依賴。當然,有一個更直接的方法來做到這一點?我的印象是WCF應該取代.NET Remoting;檢查一個對象是否實現了一個接口似乎是遠程接口所需的最基本的功能之一?

回答

0

我相信你只是需要把ServiceContract特性的接口defintions,也因爲在

[ServiceContract] 
public interface IReport 
{ 
    [OperationContract] 
    string PrintedBy { get; set; } 
} 

等等

+0

我已經試過了(有輕微的變化:OperationContract特性需要適用於單獨獲取/設置),但它不起作用。不幸的是,ServiceContracts映射到消息。 – rabidpebble 2010-05-04 14:58:11