C# 对象引用未设置为对象的实例-webservices

C# 对象引用未设置为对象的实例-webservices,c#,web-services,object,instance,webservice-client,C#,Web Services,Object,Instance,Webservice Client,我的web服务中出现了这个错误,尽管我看过关于空问题的文章,但我无法找到如何修复这个错误 这是我的代码: SendInvUpdate.InvServices.UpdateRatePackagesRequest urq = new SendInvUpdate.InvServices.UpdateRatePackagesRequest(); SendInvUpdate.InvServices.UpdateRatePackagesOperationResponse ors = new

我的web服务中出现了这个错误,尽管我看过关于空问题的文章,但我无法找到如何修复这个错误

这是我的代码:

    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();          
    }
SendInvUpdate.InvServices.updateratepackagerequest urq=new SendInvUpdate.InvServices.updateratepackagerequest();
SendInvUpdate.InvServices.UpdateRatePackagesOperationResponse ors=新建SendInvUpdate.InvServices.UpdateRatePackagesOperationResponse();
受保护的无效页面加载(对象发送方、事件参数e)
{
Int64 HID=819942;
Int64 HRID=154482;
SendInvUpdate.InvServices.UpdateratePackageRequest请求=新建SendInvUpdate.InvServices.UpdateratePackageRequest();
ChannelManagerAccount帐户=新的ChannelManagerAccount();
request.HotelId=HID;
int=4;
DateTime frodte=转换为ToDateTime(“2012-04-12”);
DateTime todte=转换为ToDateTime(“2012-04-30”);
int noofradepackages=3;
UpdateRatePackageRequest[]RatePackages=新的UpdateRatePackageRequest[NoofRatePackages];
字符串res;
request.RatePackages=new UpdateRatePackageRequest[NoofRatePackages];
request.ratepacks=ratepacks;
UpdateRatePackageRequest rp=新的UpdateRatePackageRequest();
for(int i=0;i
我知道这与RateDetails数组和初始化RateDetails的值到请求的那一刻有关,但我不确定如何或如何处理。在调试模式下,当查看rp的值时,rp.Rates[0]、rp.Rates[1]、rp.Rates[2]和RatePackages[0]、RatePackages[1]、RatePackages[2]都没有值,因此我强烈感觉这就是我的问题所在,但我不知道如何修复


如果你能洞悉我的错误,我将不胜感激

将icc服务引用的初始化移到页面中\u加载代码如下所示

SendInvUpdate.InvServices.InventoryServiceClient icc = new SendInvUpdate.InvServices.InventoryServiceClient(); 
ors = icc.UpdateRatePackages(request); ( Line where the error appears)
我不是asp.net方面的专家,但如果不将全局变量保存在某个持久性容器中(搜索关于会话、视图状态),则无法将代码基于全局变量

编辑: 这里似乎也有问题

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

编辑2: 您向InventoryServiceClient发送一个对象
请求
,该对象包含一个UpdateRatePackageRequest数组,但创建该数组后,您不会设置UpdateRatePackageRequest的任何实例。因此,我假设InventoryServiceClient在从数组读取值时失败。 我将尝试以这种方式更改您的for循环

   for (int i = 0; i < NoofRatePackages; i++)       
   {               
        UpdateRatePackageRequest rp = new UpdateRatePackageRequest(); 
        request.RatePackages[i] = rp;
        ....
for(int i=0;i
RateDetails出现相同错误。您创建了数组,但没有使用RateDetails的实际实例设置数组的任何值

        for (int j = 0; j < NoofRatePackages; j++) 
        { 
            RateDetails rd = new RateDetails();  
            rp.Rates[j] = rd;
            ....
for(int j=0;j
ores在哪里定义?谢谢,我已经编辑过,应该在我的web服务的新实例的顶部定义ors。谢谢,它不起作用,我编辑了代码,以显示在您的建议后的外观。我希望,如果您在有问题的行上设置断点,并检查
请求
a在
icc
vars中,您将看到它们不是空的。因此,如果您执行该行,代码出现未处理的异常,这意味着错误是webservice方法UpdateRatePackagesHanks@steve的内部错误。我设置了一个断点,发现没有空值,我还修改了我的问题,希望它能澄清m这对每个人来说都是一个问题。我上周在这个网站上提出的一个问题中,从Web服务中的一个数组示例中得到了这一点,但我现在没有这个链接。它工作正常,因为我能够获得rp.ratepackeid=HRID;as 154482的值。在调用RateDetails实例后,我得到的值为空。