Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отправка данных на Сервер Соап [D7, WinXP]


Bellf ©   (2009-12-03 16:31:00) 

Есть 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);

Немогу разобраться почему


Bellf   (2009-12-04 13:51:00) [1]

Да спасибо все дело было в очистке.


Сергей М.   (2009-12-04 08:19:00) [2]


> data.commission := dec; // разберись что здесь происходит. Если простое копирование указателя, то
> dec.Free; // вот тебе и грабли


brother   (2009-12-04 05:46:00) [3]

> wsd := GetPriceRpcPortType();

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

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

и уничтожать

> dec.Free;

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

> dec.XSToNative('0');

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

> data := PriceStruct.Create;

а где уничтожение? не нашел...
это на пока...
зы код - тихий ужОс...


Bellf   (2009-12-03 17:35:00) [4]

До этого выполнял код в маленькой тестовой процедуре
Все Срабатывало.

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


clickmaker   (2009-12-03 16:36:00) [5]

видимо, wsd = nil


Наверх

Титульная страница Поиск, карта сайта Написать письмо