WCF服务合同;从客户端调用类方法

时间:2013-12-24 12:51:59

标签: c# wcf

使用WCF服务我遇到了以下问题:从客户端(简单控制台应用程序)调用服务,我无法访问标有[DataContract]和[ServiceContract]的类的方法,即使此方法已被标记使用[OperationContract](实际上,到目前为止,我已经尝试了所有可能的属性组合:D)。有办法解决吗?我想在这里缺少一些要点,但我仍然无法处理它,需要一个人的帮助^^ 这是一个类的代码:

[ServiceContract]
[DataContract]
public class AmountSpecification : IOrderSpecification
{
    [DataMember]
    public int Amount {get ; set;}

    public AmountSpecification(int amount)
    {
        Amount = amount;
    }
    public bool IsSatisfiedBy(Order o)
    {
        return o.Amount >= Amount;
    }

    [OperationContract]
    public IOrderSpecification And(IOrderSpecification specification)
    {
        return new AndSpecification(this, specification);
    }

}

2 个答案:

答案 0 :(得分:0)

您将服务合同和数据合同混合在一个类中。您只需要DataContractDataMember属性来创建数据合同,甚至不需要这些合同。

但是,当您使用此数据协定从服务生成服务引用时,并且您要添加服务引用的项目没有对定义AmountSpecification的程序集的引用,它将生成仅包含给定名称和属性的数据协定。

如果要在其enitrety中使用该类,则必须在客户端应用程序中引用该类所定义的程序集,并在服务引用配置中选中“重用引用程序集中的类型”。请参阅Service reference complex types

答案 1 :(得分:0)

您的方法返回IOrderSpecification。

因此,在客户端,没有指示使用哪个实现,(AmountSpecification,AndSpecification等),因此客户端将不会创建正确的实例类型。

您需要在界面上添加Well Known Types attribute。这将允许wsdl包含实现的定义,因此客户端将获得信息。