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

C# WCF服务合同;从客户端调用类方法,c#,wcf,C#,Wcf,使用WCF服务时,我遇到了以下问题:从客户端(简单控制台应用程序)调用服务,我无法访问标记为[DataContract]和[ServiceContract]的类的方法,即使该方法标记为[OperationContract](实际上,到目前为止,我已经尝试了所有可能的属性组合:D)。有办法解决吗?我想我遗漏了一些要点,但仍然无法处理,需要别人的帮助^^ 下面是一个类的代码: [ServiceContract] [DataContract] public class AmountSpecificat

使用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);
    }

}

您在一个类中混淆了服务契约和数据契约。创建数据协定只需要
DataContract
DataMember
属性,而这些属性甚至都不是必需的

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


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

您的方法返回IOrderSpecification

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


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

您应该在问题中添加代码。您应该使用ServiceContract来装饰您的服务,或者更好的做法是使用ServiceContract来装饰IOrderSpecification,然后使用DataContract和DataMember属性创建单独的数据类它已经这样装饰:(感谢您的评论,但我已经这样做了:(对我不起作用,很遗憾,“不起作用”不是错误。请删除服务引用,添加对定义了
AmountSpecification
的程序集的引用,并在选中“重用引用程序集的类型”的情况下重新创建服务引用。已完成:)获取“…AmountSpecification不包含”和“…”的定义。当右键单击
AmountSpecification
并选择转到定义(F12)时,您将转到何处?您在更新服务引用之前重建了项目吗?我转到控制台项目中序列化的自动生成文件。是的,我确实重建了项目,但允许将已知类型与接口关联吗?似乎不是这样……因此,您只需要使用基类而不是接口。我最终创建了基类class而不是接口,使用复合规范而不是在客户端代码中组合规范。感谢您的建议!