【问题标题】:wcf reference with nested arrays inaccessible due to its protection level由于其保护级别而无法访问嵌套数组的 wcf 引用
【发布时间】:2015-11-04 05:25:32
【问题描述】:

我必须调用具有复杂数据结构的第三方 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 还是自动生成的类?

【问题讨论】:

    标签: c# arrays wcf wsdl


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-26
      • 2011-09-01
      • 1970-01-01
      • 2011-04-02
      • 2011-02-07
      • 2012-01-25
      • 2022-01-18
      相关资源
      最近更新 更多