嵌套数组的wcf引用由于其保护级别而无法访问

本文关键字:访问 保护 于其 数组 wcf 引用 嵌套 | 更新日期: 2023-09-27 18:20:31

我必须用复杂的数据结构作为参数来调用第三部分Wcf服务的方法。在VS2012中,我引用了Wsdl。Reference.cs是自动生成的。参数是一个大结构,并且有一些自定义元素的嵌套数组。以下是Reference.cs 代码的一部分

    private ProcessTableMachinery[] processDataTableMachineryField;
    /// <remarks/>
    [System.Xml.Serialization.XmlArrayAttribute(Order=27)]
    [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)]
    public ProcessTableMachinery[] ProcessDataTableMachinery {
        get {
            return this.processDataTableMachineryField;
        }
        set {
            this.processDataTableMachineryField = value;
            this.RaisePropertyChanged("ProcessDataTableMachinery");
        }
    }

ProcessTableMachinery是一个类,它包含另一个数组,如下所示。

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18408")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://blue-group.it/")]
public partial class ProcessTableMachinery : object, System.ComponentModel.INotifyPropertyChanged {
    private SingleDataMachinery[] dataTableValuesField;
    /// <remarks/>
    [System.Xml.Serialization.XmlArrayAttribute(Order=7)]
    [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)]
    public SingleDataMachinery[] DataTableValues {
        get {
            return this.dataTableValuesField;
        }
        set {
            this.dataTableValuesField = value;
            this.RaisePropertyChanged("DataTableValues");
        }
    }

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
    protected void RaisePropertyChanged(string propertyName) {
        System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
        if ((propertyChanged != null)) {
            propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }
}

我必须用一些数据初始化dataTableValuesField,如下所示。

objRetTable.ProcessDataTableMachinery[iIndex].dataTableValuesField = new RemoteWebService.SingleDataMachinery[1];

我收到一个错误ProcessTableMachinery.dataTableValuesField由于其保护级别而无法访问。我正在寻找一个变通办法。如果我将dataTableValuesField更改为public到reference.cs,我会得到一个运行时反射错误。我应该修改Wsdl还是自动生成的类?

嵌套数组的wcf引用由于其保护级别而无法访问

问题是,当从Wsdl生成字段时,它会生成一个公共属性(getter和setter)和一个私有字段。您必须使用公共属性(DataTableValues),而不是字段(dataTableValuesField

objRetTable.ProcessDataTableMachinery[iIndex].DataTableValues = new RemoteWebService.SingleDataMachinery[1];