代理类定义缺少FieldSpecified属性

本文关键字:FieldSpecified 属性 定义 代理 | 更新日期: 2023-09-27 18:22:01

我正在引用一个外部SOAP服务(我指的是由另一个开发团队创建的外部SOAP服务)作为我的.NET服务层中的服务引用。

我以前多次执行过这种类型的操作,通常生成的代理将包含一个带有数据字段的类结构,然后是<FieldName>FieldSpecified属性,以允许选择性填充这些字段。

这种方法工作得很好,因为它基本上将信息传递回另一个应用程序以更新其数据库中的某些字段。

以下是在过去中生成的具有所需行为的示例类:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://www.sampleproxyclass.com/updatecustomer")]
public partial class Customer : object, System.ComponentModel.INotifyPropertyChanged {

    private string CustomerName;
    private System.Nullable<System.DateTime> dateOfBirthField;
    private bool dateOfBirthFieldSpecified;
    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Order=1)]
    public string CustomerName{
        get {
            return this.CustomerName;
        }
        set {
            this.CustomerName= value;
            this.RaisePropertyChanged("CustomerName");
        }
    }
    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(DataType="date", IsNullable=true, Order=4)]
    public System.Nullable<System.DateTime> dateOfBirth{
        get {
            return this.dateOfBirthField;
        }
        set {
            this.dateOfBirthField= value;
            this.RaisePropertyChanged("dateofBirth");
        }
    }
    /// <remarks/>
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool dateOfBirthFieldSpecified{
        get {
            return this.dateOfBirthFieldSpecified;
        }
        set {
            this.dateOfBirthFieldSpecified= value;
            this.RaisePropertyChanged("dateOfBirthFieldSpecified");
        }
    }
}

出于某种原因,这个最新的服务根本不会生成FieldSpecified属性,这给我们带来了一个主要的集成难题。我无法控制XSD规范或创建,但我一直在努力帮助负责XSD的团队更改定义,以便它生成我的示例中的代理。

我认为关键是将minOccurs="0"添加到定义中,但这并没有奏效。我也让他们尝试nillable="true",但再次没有乐趣。

所以我的问题是,当服务引用被添加到.NET项目中时,是什么XSD配置驱动FieldSpecified属性的创建?

我使用的是VS2013,框架4.5.1。

代理类定义缺少FieldSpecified属性

只是为了回答您的问题;根据MSDN的说法,这种语法应该为您提供可以为null的类型。

   <xs:element minOccurs="1" maxOccurs="1" name="NameNullable" nillable="true" type="xs:string" />

不幸的是,这从来都不是直截了当的。我最终编写了自己的工具来更改过去VS生成的代码。你可能也必须做一些类似的事情。

我刚刚在stackoverflow上搜索了类似的问题,发现了这个。一些人评论说,他们编写了自己的工具来处理这类问题。似乎没有简单的出路。