Конференция "Сети" » Отправка данных на Сервер Соап [D7, WinXP]
 
  • Bellf © (03.12.09 16:31) [0]
    Есть SOAP сервер на Java
    Затянул WSDL файл через WSDL Importer

       property articleId: WideString read FarticleId write FarticleId;
       property branchCode: Integer read FbranchCode write FbranchCode;
       property commission: TXSDecimal read Fcommission write Fcommission;
       property competitionIds: ArrayOfString read FcompetitionIds write FcompetitionIds;
       property competitionPrices: ArrayOfDecimal read FcompetitionPrices write FcompetitionPrices;
       property extraCharge: TXSDecimal read FextraCharge write FextraCharge;
       property price: TXSDecimal read Fprice write Fprice;
       property priceDate: TXSDateTime read FpriceDate write FpriceDate;
       property primeCost: TXSDecimal read FprimeCost write FprimeCost;
       property primeCostTotal: TXSDecimal read FprimeCostTotal write FprimeCostTotal;
       property remainder: TXSDecimal read Fremainder write Fremainder;
       property reserve: TXSDecimal read Freserve write Freserve;
       property sales: TXSDecimal read Fsales write Fsales;
       property tonnage: TXSDecimal read Ftonnage write Ftonnage;
       property turnover: TXSDecimal read Fturnover write Fturnover;


    Есть два динамических массива competitionIds,competitionPrices

    В Тексте инициализирую и заполняю свойства
    var
    wsd    :PriceRpcPortType;
    data   :PriceStruct;
    dec    :TXSDecimal;
    datdec :TXSDateTime;
    arof   :ArrayOfString;
    ardec  :ArrayOfDecimal;
    i      :integer;
    begin
    data := PriceStruct.Create;
    data.articleId := 'F7070921-7A56-4F5B-BE98-1B1AA72A1F02';
    data.branchCode:= 1;
    dec  := TXSDecimal.Create;
    dec.XSToNative('0');
    data.commission := dec;
    dec.Free;
    SetLength(arof,3);
    arof[0]:='6665F08F-BA2D-4BA6-BE8E-67209672FB6E';
    arof[1]:='488BE5E4-148E-4A58-BD9B-2EBE14C014DC';
    {for i:=0 to High(arof)-1 do begin
     arof[i]:='6665F08F-BA2D-4BA6-BE8E-67209672FB6E';
     Memo1.Lines.Add(IntToStr(i));
    end;}

    data.competitionIds:=arof;
    SetLength(ardec,3);
    dec  := TXSDecimal.Create;
    dec.XSToNative('5000');
    ardec[0]:= dec;
    dec.Free;
    dec  := TXSDecimal.Create;
    dec.XSToNative('5100');
    ardec[1]:= dec;
    dec.Free;
    data.competitionPrices:= ardec;
    dec  := TXSDecimal.Create;
    dec.XSToNative('0');
    data.extraCharge := dec;
    dec.Free;
    dec  := TXSDecimal.Create;
    dec.XSToNative('5100');
    data.price := dec;
    dec.Free;
    datdec  := TXSDateTime.Create;
    datdec.XSToNative('2009.12.02');
    data.priceDate := datdec;
    datdec.Free;
    dec  := TXSDecimal.Create;
    dec.XSToNative('0');
    data.primeCost := dec;
    dec.Free;
    dec  := TXSDecimal.Create;
    dec.XSToNative('0');
    data.primeCostTotal := dec;
    dec.Free;
    dec  := TXSDecimal.Create;
    dec.XSToNative('0');
    data.remainder := dec;
    dec.Free;
    dec  := TXSDecimal.Create;
    dec.XSToNative('0');
    data.reserve := dec;
    dec.Free;
    dec  := TXSDecimal.Create;
    dec.XSToNative('0');
    data.sales := dec;
    dec.Free;
    dec  := TXSDecimal.Create;
    dec.XSToNative('10.543');
    data.tonnage := dec;
    dec.Free;
    dec  := TXSDecimal.Create;
    dec.XSToNative('0');
    data.turnover := dec;
    dec.Free;
    wsd :=GetPriceRpcPortType();
    wsd.savePrice(data);
    // savePrice(data);
    { wsd := GetPriceRpcPortType();
    with wsd do begin   savePrice(data); end;}



    при попытки выполнить функцию отправлющую данные программа вылетает с криком Acsses Violation at adress

    wsd :=GetPriceRpcPortType();
    wsd.savePrice(data);


    Немогу разобраться почему
  • clickmaker © (03.12.09 16:36) [1]
    видимо, wsd = nil
  • Bellf © (03.12.09 17:35) [2]
    До этого выполнял код в маленькой тестовой процедуре
    Все Срабатывало.

    wsd := GetPriceRpcPortType();
    with wsd do begin plus2(xsf); end;

  • brother © (04.12.09 05:46) [3]
    > wsd :=GetPriceRpcPortType();

    где это описано? и что возвращает?

    постоянно создавать
    > dec  := TXSDecimal.Create;

    и уничтожать

    > dec.Free;

    чтобы выполнить операцию типа:

    > dec.XSToNative('0');

    имхо не кошерно...
    далее:

    > data := PriceStruct.Create;

    а где уничтожение? не нашел...
    это на пока...
    зы код - тихий ужОс...
  • Сергей М. © (04.12.09 08:19) [4]

    > data.commission := dec; // разберись что здесь происходит. Если простое копирование указателя, то
    > dec.Free; // вот тебе и грабли
  • Bellf © (04.12.09 13:51) [5]
    Да спасибо все дело было в очистке.
 
Конференция "Сети" » Отправка данных на Сервер Соап [D7, WinXP]
Есть новые Нет новых   [134437   +30][b:0][p:0.002]