【问题标题】:Determine if Optional Parameter was passed in WCF Soap Service确定是否在 WCF Soap 服务中传递了可选参数
【发布时间】:2012-05-10 14:10:59
【问题描述】:

我正在尝试确定是否将可选参数传递给我的 WCF 服务。例如假设我有一个简单的输入对象,定义如下。

[DataContract]
public class TestObject
{
    [DataMember(IsRequired=false)]
    public int OptionalIntegerField { get; set; }
    [DataMember(IsRequired = false)]
    public bool OptionalBooleanField { get; set; }
    [DataMember(IsRequired = false)]
    public string OptionalStringField { get; set; }
}

而服务合同定义为

[OperationContract(Name = "TestMethod")]
void TestMethod(TestObject obj);

如果我将 TestMethod 定义为

    public void TestMethod(TestObject obj)
    {
        Debug.WriteLine(obj.OptionalBooleanField);
        Debug.WriteLine(obj.OptionalIntegerField);
        Debug.WriteLine(obj.OptionalStringField);
    }

我的问题是,如果我在没有指定输入参数的情况下对 TestMethod 进行 SOAP 调用,OptionalIntegerField 和 OptionalBooleanField(作为值类型)将设置为其默认值(0 和 false)。我需要确定是否传入了可选参数。

我的问题是处理这个问题的适当方法是什么?我正在考虑使我的 OptionalIntegerField 和 OptionalBooleanField 可以为空类型,但我不确定这是否是正确的方法。

【问题讨论】:

    标签: c# wcf soap


    【解决方案1】:

    假设您的引用类型也以相同的方式使用 null 的概念,其中 null 表示值不存在,可空值类型是一种完全可以接受的方式来指示值类型成员的可能性。

    【讨论】:

    • 我同意您的回答是对此特定问题的可接受答案。但是制作可空类型是解决此类问题的唯一方法吗?你知道其他解决方案吗?
    • 您不必使用可为空的类型,但如果您不使用,则需要一些其他常见的缺失值指定。您可以使用默认值来表示它缺失,但这样就不允许将默认值作为有效值。或者,您可以向合约对象添加自定义序列化,以将缺失值设置为您选择的默认“缺失”值。但是,问题是您为什么要这样做。如果有一个可以空值类型不适用于您的情况的原因,我建议您在 Stack Overflow 上提出一个新问题。
    猜你喜欢
    • 2016-03-30
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多