System.ArgumentNullException: 'значение не может быть пустым Имя параметра: источник' - PullRequest
0 голосов
/ 17 января 2020

У меня есть программа, которая подключается к сайту и получает список заказов, используя soap api. Но у меня действительно странная проблема. Когда я пытаюсь получить заказы дня, которых нет, а затем пытаюсь получить список заказов за день, я получаю эту ошибку. Но странная вещь: если поставить точку останова на строку, где я получил ошибку, и шаг за шагом оценить программу, я не получу никаких ошибок. Как это могло случиться. вот код.

https://api.n11.com/ws/OrderService.wsdl

using n11.Deneme.Forms.com.n11.api;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace n11.Deneme.Forms
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string strStartDate = "18/01/2020";
            string strEndDate = "18/01/2020";

            long totalCountValue = 50;
            int currentPageValue = 0;
            int pageCountValue = 1;
            int pageSizeValue = 50;

            Authentication auth = new Authentication();
            auth.appKey = "b891a6b9-cb97-4a7e-9ffb-f7b1e2a593e8";
            auth.appSecret = "pHCjYYadxwTG64Ej";

            OrderSearchPeriod orderSearchPeriod = new OrderSearchPeriod();
            orderSearchPeriod.startDate = strStartDate;
            orderSearchPeriod.endDate = strEndDate;

            OrderDataListRequest orderDataListRequest = new OrderDataListRequest();
            //orderDataListRequest.status = "1";
            orderDataListRequest.period = orderSearchPeriod;
            //orderDataListRequest.orderNumber = "209524598478";

            PagingData pagingData = new PagingData();
            pagingData.currentPage = currentPageValue;
            pagingData.pageCount = pageCountValue;
            pagingData.pageSize = pageSizeValue;
            pagingData.totalCount = totalCountValue;

            DetailedOrderListRequest request = new DetailedOrderListRequest();
            request.auth = auth;
            request.pagingData = pagingData;
            request.searchData = orderDataListRequest;

            OrderServicePortService port = new OrderServicePortService();
            DetailedOrderListResponse response = port.DetailedOrderList(request);
            List<DetailedOrderData> orderList = response.orderList.ToList();

            foreach (var order in orderList)
            {
                MessageBox.Show(order.totalAmount.ToString() + " - " + order.orderNumber + " - " + order.citizenshipId + " - " + order.createDate);

                long orderIdValue = order.id;

                OrderDataRequest orderDataRequest = new OrderDataRequest();
                orderDataRequest.id = orderIdValue;

                OrderDetailRequest orderdetailrequest = new OrderDetailRequest();
                orderdetailrequest.auth = auth;
                orderdetailrequest.orderRequest = orderDataRequest;


                OrderServicePortService port1 = new OrderServicePortService();
                OrderDetailResponse orderDetailResponse = port1.OrderDetail(orderdetailrequest);
                OrderDetailData orderDetail = orderDetailResponse.orderDetail;

                MessageBox.Show(orderDetail.orderNumber);

                List<OrderSearchData> orderItemList = orderDetail.itemList.ToList();

                foreach (var item in orderItemList)
                {

                    MessageBox.Show(item.shipmentInfo.campaignNumber);

                }


            }

        }



    }
}       

Ответы [ 2 ]

0 голосов
/ 17 января 2020
if(response.orderList == null)
            {
                var temp = button1_Click.PerformClick();
                return temp;           
            }
            else
            {
                List<DetailedOrderData> orderList = response.orderList.ToList();

                return orderList;
            }        
0 голосов
/ 17 января 2020

Если вы получаете сообщение об ошибке:

List<DetailedOrderData> orderList = response.orderList.ToList();   //I GOT THE ERROR ON THIS LINE 

, вам нужно посмотреть, как response.orderList получает значение. В частности, делает ли он что-то с потоками, задачами, таймерами, внешними событиями или чем-то еще, что может означать, что оно заполняется вскоре после первоначального возврата из DetailedOrderList, что может объяснить, почему это работает, когда вы отлаживаете и делаете шаг вперед (добавляя решающую задержку в вещи).

Вы также можете просто сделать:

var tmp = response.orderList;
if (tmp == null) throw new InvalidOperationException(
    "hey, response.orderList was null! this is not good!");
List<DetailedOrderData> orderList = tmp.ToList();
return orderList;

, что сделало бы очень ясным и ясным, что это то, что это происходит. Если вы не получите это исключение, а что-то еще, тогда: требуется дополнительная отладка!

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