【问题标题】:WCF - Missing integer parameter treated like 0WCF - 缺少被视为 0 的整数参数
【发布时间】:2012-11-19 13:42:14
【问题描述】:

我正在使用 WCF 生成 SOAP Web 服务,现在我面临以下问题:

  • 我定义了一个 OperationContract,看起来像这样

[OperationContract] void InsertSomeData(string version, int someId);

  • 在使用 soapUI 测试服务时,我意识到如果我删除请求中的 someId 标签,我的服务中确实会收到值 0
  • 这是标准行为吗?实际上,我认为服务会抛出某种异常,因为参数不可为空。
  • 我的服务是否可以在 0 作为传递的实际值和只是缺少标签之间有所不同,或者我是否必须提前将所有参数设置为空

提前感谢您的帮助。

【问题讨论】:

    标签: c# wcf web-services soap missing-data


    【解决方案1】:

    破解之道:

    [OperationContract]
    public void InsertSomeData(MyData data){...}
    
    [DataContract]
    public class MyData{
    [DataMember]
    public string version{get;set;}
    [DataMember(IsRequired=true)]
    public int someId{get;set;}
    
    }
    

    冗长但更好的方法:http://thorarin.net/blog/post/2010/08/08/Controlling-WSDL-minOccurs-with-WCF.aspx

    【讨论】:

    • 不幸的是,方法 1 对我来说是没有选择的。该接口是预定义的,尽管我知道使用“请求对象”比传递多个参数更好(并且可扩展/可适应)的想法。我必须检查方法 2,因为它更复杂
    • 如果您找到更好的方法,请告诉我! :)
    • 我认为 No.2 确实是一个非常好的解决方案,尽管它对于解决基本任务似乎相当复杂。正如我在问题中所说,我对这种行为有点震惊,因为我没有预料到。我是 WCF 的新手,并认为 Microsoft 会以更舒适的方式处理此要求...
    • 最后,虽然方法 2 相当复杂,但它对我很有效。接受:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多