0

Web サービスにこのエラーが表示されます。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] もまた、nullなので、私の問題はそこにあると強く感じていますが、修正方法についての手がかりがありません。

私がどこで間違っていたのかについての洞察に感謝します!

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: UpdateRatePackageRequest の配列を含むオブジェクトrequestを InventoryServiceClient に送信しますが、配列の作成後に 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 に答える