2010-05-04 102 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