0

我的网络服务中出现了这个错误,即使我查看了关于 null 问题的文章,我也无法找到解决这个错误的方法

这是我的代码:

    SendInvUpdate.InvServices.UpdateRatePackagesRequest urq = new SendInvUpdate.InvServices.UpdateRatePackagesRequest();
    SendInvUpdate.InvServices.UpdateRatePackagesOperationResponse ors = new SendInvUpdate.InvServices.UpdateRatePackagesOperationResponse();


    protected void Page_Load(object sender, EventArgs e)
    {
        Int64 HID = 819942;
        Int64 HRID = 154482;

        SendInvUpdate.InvServices.UpdateRatePackagesRequest request = new SendInvUpdate.InvServices.UpdateRatePackagesRequest();

        ChannelManagerAccount account = new ChannelManagerAccount();
        request.HotelId = HID;

        int avail = 4;
        DateTime frodte = Convert.ToDateTime("2012-04-12");
        DateTime todte = Convert.ToDateTime("2012-04-30");
        int NoofRatePackages = 3;
        UpdateRatePackageRequest[] RatePackages = new UpdateRatePackageRequest[NoofRatePackages];
        string res;
        request.RatePackages = new UpdateRatePackageRequest[NoofRatePackages];
        request.RatePackages = RatePackages;

        UpdateRatePackageRequest rp = new UpdateRatePackageRequest();

        for (int i = 0; i < NoofRatePackages; i++)
        {        
            rp.RatePackageId = HRID;        

            RateDetails[] Rates = new RateDetails[NoofRatePackages];

            rp.Rates = new RateDetails[NoofRatePackages];
            rp.Rates = Rates;

            RateDetails rd = new RateDetails();

            for (int j = 0; j < NoofRatePackages; j++)
            {
                rd.Availability = avail;

                rd.AvailabilityApplicationType = SendInvUpdate.InvServices.AvailabilityApplicationType.SET;

                rd.FromDate = frodte;

                rd.ToDate = todte;

            }

        }

       SendInvUpdate.InvServices.InventoryServiceClient icc = new SendInvUpdate.InvServices.InventoryServiceClient();            
        // ( *Line where the error appears*)
        ors = icc.UpdateRatePackages(request); 

        res = ors.Results.ToString();          
    }

我知道它与 RateDetails 数组有关,并将 RateDetails 的值初始化到请求的那一刻,但我不确定如何或如何处理。在调试模式下查看 rp 的值时,没有 rp.Rates[0],rp.Rates[1],rp.Rates[2] 的值,RatePackages[0],RatePackages[1],RatePackages[2] 也是也为空,所以我有一种强烈的感觉,那就是我的问题所在,但我不知道如何解决。

将不胜感激任何形式的洞察力,我哪里出错了!

4

1 回答 1

2

将您的 page_load 代码中的 icc 服务引用的初始化移动为

SendInvUpdate.InvServices.InventoryServiceClient icc = new SendInvUpdate.InvServices.InventoryServiceClient(); 
ors = icc.UpdateRatePackages(request); ( Line where the error appears)

我不是 asp.net 方面的专家,但如果你不将它们保存在某个持久性容器中,你就不能将你的代码基于全局变量(搜索 SESSION、VIEWSTATE)

编辑:这里也有问题

   UpdateRatePackageRequest[] RatePackages = new UpdateRatePackageRequest[NoofRatePackages]; 
   string res; 
   request.RatePackages = new UpdateRatePackageRequest[NoofRatePackages]; 
   request.RatePackages = RatePackages; 

应该只是request.RatePackages = new UpdateRatePackageRequest[NoofRatePackages];

EDIT2:您向 InventoryServiceClient 发送一个request包含 UpdateRatePackageRequest 数组的对象,但在创建该数组后,您没有设置任何 UpdateRatePackageRequest 实例。所以我想 InventoryServiceClient 在从数组中读取值时失败。我将尝试以这种方式更改您的 for 循环

   for (int i = 0; i < NoofRatePackages; i++)       
   {               
        UpdateRatePackageRequest rp = new UpdateRatePackageRequest(); 
        request.RatePackages[i] = rp;
        ....

与 RateDetails 相同的错误。您创建数组,但不要使用 RateDetails 的实际实例设置数组的任何值

        for (int j = 0; j < NoofRatePackages; j++) 
        { 
            RateDetails rd = new RateDetails();  
            rp.Rates[j] = rd;
            ....
于 2012-04-10T21:24:41.027 回答