Поставщик ссылок на веб-службы Microsoft WCF создает веб-службы.Возвращен нулевой массив - PullRequest
0 голосов
/ 20 сентября 2018

Итак, у меня есть этот веб-сервис SOAP, который я сначала тестирую с помощью Postman, и он работает правильно:

<Soap:Envelope xmlns:Soap="http://schemas.xmlsoap.org/soap/envelope/">
    <Soap:Body>
        <Read_Result xmlns="urn:microsoft-dynamics-schemas/page/salesorder">
            <SalesOrder>
                <Key>28;JAAAAACLAQAAAAJ7BDEAMAAwADE=6;4923601;10;SalesLines1;36;JQAAAACLAQAAAAJ7BDEAMAAwADEAAAAAhxAn6;4923840;</Key>
                <No>1001</No>
                <SalesLines>
                    <Sales_Order_Line>
                        <Key>36;JQAAAACLAQAAAAJ7BDEAMAAwADEAAAAAhxAn6;4923840;</Key>
                        <Type>Item</Type>
                        <FilteredTypeField>Item</FilteredTypeField>
                        <No>1000</No>
                    </Sales_Order_Line>
                </SalesLines>
            </SalesOrder>
        </Read_Result>
    </Soap:Body>
</Soap:Envelope>

Как видите, в ответе "Sales_Order_Line" есть дочерний элемент

Таким образом, я использую поставщика ссылок на веб-службы WCF для создания прокси для этой веб-службы.Теперь при вызове веб-службы Sales_Order_Line имеет значение Null.

Вот некоторые части кода, сгенерированные инструментами:

[System.CodeDom.Compiler.GeneratedCodeAttribute("dotnet-svcutil", "1.0.0.1")][System.Diagnostics.DebuggerStepThroughAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:microsoft-dynamics-schemas/page/salesorder")]


public partial class SalesOrder
{

    private string keyField;

    private string noField;

   private Sales_Order_Line[] salesLinesField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Order=0)]
    public string Key
    {
        get
        {
            return this.keyField;
        }
        set
        {
            this.keyField = value;
        }
    }

    [System.Xml.Serialization.XmlElementAttribute(Order=1)]
    public string No
    {
        get
        {
            return this.noField;
        }
        set
        {
            this.noField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlArrayAttribute(Order=85)]
    [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)]
    public Sales_Order_Line[] SalesLines
    {
        get
        {
            return this.salesLinesField;
        }
        set
        {
            this.salesLinesField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("dotnet-svcutil", "1.0.0.1")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:microsoft-dynamics-schemas/page/salesorder")]
public partial class Sales_Order_Line
{

    private string keyField;

    private Type typeField;

    private bool typeFieldSpecified;

    private string filteredTypeFieldField;

    private string noField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Order=0)]
    public string Key
    {
        get
        {
            return this.keyField;
        }
        set
        {
            this.keyField = value;
        }
    }
}

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("dotnet-svcutil", "1.0.0.1")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(WrapperName="Read", WrapperNamespace="urn:microsoft-dynamics-schemas/page/salesorder", IsWrapped=true)]
public partial class Read
{

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace="urn:microsoft-dynamics-schemas/page/salesorder", Order=0)]
    public string No;

    public Read()
    {
    }

    public Read(string No)
    {
        this.No = No;
    }
}`

Это мой вызов веб-службы:

`публичная асинхронная запись задачи (строковые данные [FromBody]) {SalesOrder_PortClient order = new SalesOrder_PortClient ();

        Read_Result res = new Read_Result();
        res = await order.ReadAsync("1001");
        //All SalesOrder fields have a value, but its SalesLines array is Null
        Sales_Order_Line[] salesLines = res.SalesOrder.SalesLines;  //salesLines is always null

        if (salesLines.Length > 0)  //Throws a null reference exception
        {  
            string key = salesLines[0].Key;                  
        }  


        return res;

    }`

Есть какие-либо идеи относительно возможного исправления моего сгенерированного reference.cs?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...