首页 文章

WCF需要属性困境

提问于
浏览
1

对于客户,我们正在开发一些WCF Web服务 . 我们的消息 Contract 是通过在类及其属性之上使用DataContract和DataMember属性来定义的 . DataMember属性具有一些额外的属性,允许我们添加一些额外的规则 . 例如,如果属性应始终可用,我们使用(IsRequired = true);表明这一点 . 收到或发送邮件时会检查这些规则 .

[DataContract]
public class TestClass      
{  
    [DataMember(IsRequired = true)]  
    public int RequiredValue { get; set; }      
}

然而在我们的测试期间,我们注意到它不起作用,因为在客户端,RequiredValueField被初始化为null,所以在一些读数中我发现了这个属性,EmitDefaultValue = false,所以通过使用两者,我得到了期望的结果

[DataContract]  
public class TestClass  
{  
        [DataMember(IsRequired = true, EmitDefaultValue=false)]  
        public int RequiredValue { get; set; }  
}

但是假设,如果某个客户端初始化 RequiredValue = 0 然后调用服务方法,它会再次出错 . So how do free my APIusers with an option that they can pass any thing in this member including zero, but when they omit then only it should give error

1 回答

  • 1
    • 您还没有提到"desired"的结果 . 我的意思是你想要实现的目标 .

    • 你知道MS不建议将 EmitDefaultValue 设置为 false ,除非绝对必要吗?请阅读this MSDN page的最后一节以了解原因 .

    • 当您将 EmitDefaultValue 设置为 false 时,为您的服务生成的WSDL具有一些注释,这些注释仅由WCF理解 . 即通过这样做,您可以限制您的服务的互操作性 . 这是你的要求吗?

    Solution to your problem:

    使您的DataMember“RequiredValue”成为可以为空的int .

    [DataMember(IsRequired = true,EmitDefaultValue=false)]  
        public int? RequiredValue { get; set; }
    

    通过这样做, RequiredValue 数据成员的默认值将是 null ,您将能够设置零(0)而没有任何问题 .

相关问题