【问题标题】:Testing for interface implementation in WCF/SOA在 WCF/SOA 中测试接口实现
【发布时间】:2010-05-04 14:34:29
【问题描述】:

我有一个报告服务,它实现了许多报告。每个报告都需要某些参数。逻辑相关的参数组被放置在一个接口中,然后报表实现该接口:

[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 可以公开这些接口,还是序列化程序的限制?如果是后一种情况,那么这种 OO 模式的规范方法是什么?

我研究了 NetDataContractSerializer,但它似乎不是官方支持的实现(这意味着它不是我的项目中的一个选项)。目前,我已经放弃将接口包含在服务和客户端应用程序之间通用的库中,但这对我来说似乎是不必要的额外依赖。当然有更直接的方法可以做到这一点?我的印象是 WCF 应该取代 .NET 远程处理。检查对象是否实现接口似乎是远程接口所需的最基本功能之一?

【问题讨论】:

    标签: wcf serialization remoting interface implementation


    【解决方案1】:

    我相信您只需要将 ServiceContract 属性也放在接口定义上,如

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

    等等……

    【讨论】:

    • 我已经尝试过了(稍作改动:需要单独应用 OperationContract 属性来获取/设置),但它不起作用。不幸的是,ServiceContracts 映射到消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 2014-06-16
    相关资源
    最近更新 更多