以下是Delphi导入 WSDL 时生成的文件:
// ********** //
// The types declared in this file were generated from data read from the
// WSDL File described below:
// WSDL : http://192.168.0.100:8082/MyBloodReimburseInterface/dtoGlobalDefElementBlood?wsdl
// Encoding : UTF-8
// Version : 1.0
// (2012-07-19 13:42:35 - 1.33.2.5)
// ********** //unit dtoGlobalDefElementBlood;interfaceuses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;type // ********** //
// The following types, referred to in the WSDL document are not being represented
// in this file. They are either aliases[@] of other types represented or were referred
// to but never[!] declared in the document. The types from the latter category
// typically map to predefined/known XML or Borland types; however, they could also
// indicate incorrect WSDL documents that failed to declare or import a schema type.
// ********** //
// !:string - "http://www.w3.org/2001/XMLSchema";
// !:dateTime - "http://www.w3.org/2001/XMLSchema";
// !:int - "http://www.w3.org/2001/XMLSchema";
// !:float - "http://www.w3.org/2001/XMLSchema"; globalDefElementBlood = class; { "cn.myblood.reimburse.out.service" }
bloodRecordDorinfo = class; { "cn.myblood.reimburse.out.service" }
models = class; { "cn.myblood.reimburse.out.service" } // ********** //
// Namespace : cn.myblood.reimburse.out.service
// ********** //
globalDefElementBlood = class(TRemotable)
private
Fn1: WideString;
Fn2: WideString;
Fn3: WideString;
published
property n1: WideString read Fn1 write Fn1;
property n2: WideString read Fn2 write Fn2;
property n3: WideString read Fn3 write Fn3;
end; // ********** //
// Namespace : cn.myblood.reimburse.out.service
// ********** //
bloodRecordDorinfo = class(TRemotable)
private
Fn1: WideString;
Fn10: TXSDateTime;
Fn11: WideString;
Fn12: WideString;
Fn13: WideString;
Fn14: WideString;
Fn15: WideString;
Fn16: WideString;
Fn17: TXSDateTime;
Fn18: Integer;
Fn19: Single;
Fn2: WideString;
Fn20: Integer;
Fn21: TXSDateTime;
Fn22: WideString;
Fn23: Integer;
Fn24: Integer;
Fn25: Integer;
Fn26: WideString;
Fn3: WideString;
Fn4: Integer;
Fn5: WideString;
Fn6: Integer;
Fn7: TXSDateTime;
Fn8: WideString;
Fn9: WideString;
public
destructor Destroy; override;
published
property n1: WideString read Fn1 write Fn1;
property n10: TXSDateTime read Fn10 write Fn10;
property n11: WideString read Fn11 write Fn11;
property n12: WideString read Fn12 write Fn12;
property n13: WideString read Fn13 write Fn13;
property n14: WideString read Fn14 write Fn14;
property n15: WideString read Fn15 write Fn15;
property n16: WideString read Fn16 write Fn16;
property n17: TXSDateTime read Fn17 write Fn17;
property n18: Integer read Fn18 write Fn18;
property n19: Single read Fn19 write Fn19;
property n2: WideString read Fn2 write Fn2;
property n20: Integer read Fn20 write Fn20;
property n21: TXSDateTime read Fn21 write Fn21;
property n22: WideString read Fn22 write Fn22;
property n23: Integer read Fn23 write Fn23;
property n24: Integer read Fn24 write Fn24;
property n25: Integer read Fn25 write Fn25;
property n26: WideString read Fn26 write Fn26;
property n3: WideString read Fn3 write Fn3;
property n4: Integer read Fn4 write Fn4;
property n5: WideString read Fn5 write Fn5;
property n6: Integer read Fn6 write Fn6;
property n7: TXSDateTime read Fn7 write Fn7;
property n8: WideString read Fn8 write Fn8;
property n9: WideString read Fn9 write Fn9;
end; // ********** //
// Namespace : cn.myblood.reimburse.out.service
// ********** //
models = class(TRemotable)
private
FbrdInfo: bloodRecordDorinfo;
FgdeBlood: globalDefElementBlood;
public
destructor Destroy; override;
published
property brdInfo: bloodRecordDorinfo read FbrdInfo write FbrdInfo;
property gdeBlood: globalDefElementBlood read FgdeBlood write FgdeBlood;
end; // ********** //
// Namespace : cn.myblood.reimburse.out.service
// transport : http://schemas.xmlsoap.org/soap/http
// style : document
// binding : GlobalDefElementBloodServiceOutImplServiceSoapBinding
// service : GlobalDefElementBloodServiceOutImplService
// port : GlobalDefElementBloodServiceOutImplPort
// URL : http://192.168.0.100:8082/MyBloodReimburseInterface/dtoGlobalDefElementBlood
// ********** //
GlobalDefElementBloodServiceOut = interface(IInvokable)
['{B15820AD-9413-6AAB-3B69-90F10344FF69}']
function sendGlobalDefElementBloodReques(const globalDefElementBloods: models): Integer; stdcall;
end; RequestSOAPHeader = class(TSOAPHeader)// 为手工添加,且必须与文档中的同名
private
Fusername: WideString;
Fpassword: WideString;
published
property userName: WideString read Fusername write Fusername;
property password: WideString read FpassWord write Fpassword;
end; function GetGlobalDefElementBloodServiceOut(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): GlobalDefElementBloodServiceOut;implementationfunction GetGlobalDefElementBloodServiceOut(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): GlobalDefElementBloodServiceOut;
const
defWSDL = 'http://192.168.0.100:8082/MyBloodReimburseInterface/dtoGlobalDefElementBlood?wsdl';
defURL = 'http://192.168.0.100:8082/MyBloodReimburseInterface/dtoGlobalDefElementBlood';
defSvc = 'GlobalDefElementBloodServiceOutImplService';
defPrt = 'GlobalDefElementBloodServiceOutImplPort';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as GlobalDefElementBloodServiceOut);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
destructor bloodRecordDorinfo.Destroy;
begin
if Assigned(Fn10) then
Fn10.Free;
if Assigned(Fn17) then
Fn17.Free;
if Assigned(Fn21) then
Fn21.Free;
if Assigned(Fn7) then
Fn7.Free;
inherited Destroy;
end;destructor models.Destroy;
begin
if Assigned(FbrdInfo) then
FbrdInfo.Free;
if Assigned(FgdeBlood) then
FgdeBlood.Free;
inherited Destroy;
end;initialization
InvRegistry.RegisterInterface(TypeInfo(GlobalDefElementBloodServiceOut), 'cn.myblood.reimburse.out.service', 'UTF-8');
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(GlobalDefElementBloodServiceOut), '');
//InvRegistry.RegisterInvokeOptions(TypeInfo(GlobalDefElementBloodServiceOut), ioDocument);
RemClassRegistry.RegisterXSClass(globalDefElementBlood, 'cn.myblood.reimburse.out.service', 'globalDefElementBlood');
RemClassRegistry.RegisterXSClass(bloodRecordDorinfo, 'cn.myblood.reimburse.out.service', 'bloodRecordDorinfo');
RemClassRegistry.RegisterXSClass(models, 'cn.myblood.reimburse.out.service', 'models'); InvRegistry.RegisterHeaderClass(TypeInfo(GlobalDefElementBloodServiceOut), RequestSOAPHeader,'','');
RemClassRegistry.RegisterXSClass(RequestSOAPHeader,'');
end.
// ********** //
// The types declared in this file were generated from data read from the
// WSDL File described below:
// WSDL : http://192.168.0.100:8082/MyBloodReimburseInterface/dtoGlobalDefElementBlood?wsdl
// Encoding : UTF-8
// Version : 1.0
// (2012-07-19 13:42:35 - 1.33.2.5)
// ********** //unit dtoGlobalDefElementBlood;interfaceuses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;type // ********** //
// The following types, referred to in the WSDL document are not being represented
// in this file. They are either aliases[@] of other types represented or were referred
// to but never[!] declared in the document. The types from the latter category
// typically map to predefined/known XML or Borland types; however, they could also
// indicate incorrect WSDL documents that failed to declare or import a schema type.
// ********** //
// !:string - "http://www.w3.org/2001/XMLSchema";
// !:dateTime - "http://www.w3.org/2001/XMLSchema";
// !:int - "http://www.w3.org/2001/XMLSchema";
// !:float - "http://www.w3.org/2001/XMLSchema"; globalDefElementBlood = class; { "cn.myblood.reimburse.out.service" }
bloodRecordDorinfo = class; { "cn.myblood.reimburse.out.service" }
models = class; { "cn.myblood.reimburse.out.service" } // ********** //
// Namespace : cn.myblood.reimburse.out.service
// ********** //
globalDefElementBlood = class(TRemotable)
private
Fn1: WideString;
Fn2: WideString;
Fn3: WideString;
published
property n1: WideString read Fn1 write Fn1;
property n2: WideString read Fn2 write Fn2;
property n3: WideString read Fn3 write Fn3;
end; // ********** //
// Namespace : cn.myblood.reimburse.out.service
// ********** //
bloodRecordDorinfo = class(TRemotable)
private
Fn1: WideString;
Fn10: TXSDateTime;
Fn11: WideString;
Fn12: WideString;
Fn13: WideString;
Fn14: WideString;
Fn15: WideString;
Fn16: WideString;
Fn17: TXSDateTime;
Fn18: Integer;
Fn19: Single;
Fn2: WideString;
Fn20: Integer;
Fn21: TXSDateTime;
Fn22: WideString;
Fn23: Integer;
Fn24: Integer;
Fn25: Integer;
Fn26: WideString;
Fn3: WideString;
Fn4: Integer;
Fn5: WideString;
Fn6: Integer;
Fn7: TXSDateTime;
Fn8: WideString;
Fn9: WideString;
public
destructor Destroy; override;
published
property n1: WideString read Fn1 write Fn1;
property n10: TXSDateTime read Fn10 write Fn10;
property n11: WideString read Fn11 write Fn11;
property n12: WideString read Fn12 write Fn12;
property n13: WideString read Fn13 write Fn13;
property n14: WideString read Fn14 write Fn14;
property n15: WideString read Fn15 write Fn15;
property n16: WideString read Fn16 write Fn16;
property n17: TXSDateTime read Fn17 write Fn17;
property n18: Integer read Fn18 write Fn18;
property n19: Single read Fn19 write Fn19;
property n2: WideString read Fn2 write Fn2;
property n20: Integer read Fn20 write Fn20;
property n21: TXSDateTime read Fn21 write Fn21;
property n22: WideString read Fn22 write Fn22;
property n23: Integer read Fn23 write Fn23;
property n24: Integer read Fn24 write Fn24;
property n25: Integer read Fn25 write Fn25;
property n26: WideString read Fn26 write Fn26;
property n3: WideString read Fn3 write Fn3;
property n4: Integer read Fn4 write Fn4;
property n5: WideString read Fn5 write Fn5;
property n6: Integer read Fn6 write Fn6;
property n7: TXSDateTime read Fn7 write Fn7;
property n8: WideString read Fn8 write Fn8;
property n9: WideString read Fn9 write Fn9;
end; // ********** //
// Namespace : cn.myblood.reimburse.out.service
// ********** //
models = class(TRemotable)
private
FbrdInfo: bloodRecordDorinfo;
FgdeBlood: globalDefElementBlood;
public
destructor Destroy; override;
published
property brdInfo: bloodRecordDorinfo read FbrdInfo write FbrdInfo;
property gdeBlood: globalDefElementBlood read FgdeBlood write FgdeBlood;
end; // ********** //
// Namespace : cn.myblood.reimburse.out.service
// transport : http://schemas.xmlsoap.org/soap/http
// style : document
// binding : GlobalDefElementBloodServiceOutImplServiceSoapBinding
// service : GlobalDefElementBloodServiceOutImplService
// port : GlobalDefElementBloodServiceOutImplPort
// URL : http://192.168.0.100:8082/MyBloodReimburseInterface/dtoGlobalDefElementBlood
// ********** //
GlobalDefElementBloodServiceOut = interface(IInvokable)
['{B15820AD-9413-6AAB-3B69-90F10344FF69}']
function sendGlobalDefElementBloodReques(const globalDefElementBloods: models): Integer; stdcall;
end; RequestSOAPHeader = class(TSOAPHeader)// 为手工添加,且必须与文档中的同名
private
Fusername: WideString;
Fpassword: WideString;
published
property userName: WideString read Fusername write Fusername;
property password: WideString read FpassWord write Fpassword;
end; function GetGlobalDefElementBloodServiceOut(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): GlobalDefElementBloodServiceOut;implementationfunction GetGlobalDefElementBloodServiceOut(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): GlobalDefElementBloodServiceOut;
const
defWSDL = 'http://192.168.0.100:8082/MyBloodReimburseInterface/dtoGlobalDefElementBlood?wsdl';
defURL = 'http://192.168.0.100:8082/MyBloodReimburseInterface/dtoGlobalDefElementBlood';
defSvc = 'GlobalDefElementBloodServiceOutImplService';
defPrt = 'GlobalDefElementBloodServiceOutImplPort';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as GlobalDefElementBloodServiceOut);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
destructor bloodRecordDorinfo.Destroy;
begin
if Assigned(Fn10) then
Fn10.Free;
if Assigned(Fn17) then
Fn17.Free;
if Assigned(Fn21) then
Fn21.Free;
if Assigned(Fn7) then
Fn7.Free;
inherited Destroy;
end;destructor models.Destroy;
begin
if Assigned(FbrdInfo) then
FbrdInfo.Free;
if Assigned(FgdeBlood) then
FgdeBlood.Free;
inherited Destroy;
end;initialization
InvRegistry.RegisterInterface(TypeInfo(GlobalDefElementBloodServiceOut), 'cn.myblood.reimburse.out.service', 'UTF-8');
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(GlobalDefElementBloodServiceOut), '');
//InvRegistry.RegisterInvokeOptions(TypeInfo(GlobalDefElementBloodServiceOut), ioDocument);
RemClassRegistry.RegisterXSClass(globalDefElementBlood, 'cn.myblood.reimburse.out.service', 'globalDefElementBlood');
RemClassRegistry.RegisterXSClass(bloodRecordDorinfo, 'cn.myblood.reimburse.out.service', 'bloodRecordDorinfo');
RemClassRegistry.RegisterXSClass(models, 'cn.myblood.reimburse.out.service', 'models'); InvRegistry.RegisterHeaderClass(TypeInfo(GlobalDefElementBloodServiceOut), RequestSOAPHeader,'','');
RemClassRegistry.RegisterXSClass(RequestSOAPHeader,'');
end.
procedure TForm1.Button5Click(Sender: TObject);
var
MyWebService: GlobalDefElementBloodServiceOut;
myHeader: dtoGlobalDefElementBlood.RequestSOAPHeader;
Headers: ISOAPHeaders;
vSendModel: dtoGlobalDefElementBlood.Models; globalDefElementBloods: models;
gdeBlood: globalDefElementBlood; vResult: Integer;
begin
// 填写包头
myHeader := dtoGlobalDefElementBlood.RequestSOAPHeader.Create;
myHeader.userName := 'gzws';
myHeader.password := '456'; HTTPRIO.URL := 'http://192.168.0.100:8082/MyBloodReimburseInterface/dtoGlobalDefElementBlood?wsdl';
MyWebService := (HttpRIO as GlobalDefElementBloodServiceOut); Headers := (MyWebService as ISOAPHeaders);
Headers.Send(myHeader);//发送包头进行验证 vSendModel := dtoGlobalDefElementBlood.Models.Create;
//vSendModel.brdInfo := dtoGlobalDefElementBlood.bloodRecordDorinfo.Create;
vSendModel.gdeBlood := dtoGlobalDefElementBlood.globalDefElementBlood.Create; vSendModel.gdeBlood.n1 := '01';
vSendModel.gdeBlood.n2 := '全血类';
vSendModel.gdeBlood.n3 := '测试备注'; vResult := MyWebService.sendGlobalDefElementBloodReques(vSendModel);//此行出错,错误提示为: Fault occurred while processing,而且这只是传一条记录,如果要传多条记录,该如何操作?
if vResult = 0 then
ShowMessage('OK')
else
ShowMessage('No');
if myHeader <> nil then
FreeAndNil(myHeader);
end;以下为WEB SERVICE 提供的文档:
SOAP包体实例
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
<soap:Header>
<RequestSOAPHeader xmlns="http://localhost:6543/MyBloodReimburseInterface/dtoGlobalDefElementBlood?wsdl";>
<userName>gzws</userName>
<password>456</password>
</RequestSOAPHeader>
</soap:Header>
<soap:Body>
<ns2:sendGlobalDefElementBloodReques xmlns:ns2="cn.myblood.reimburse.out.service">
<globalDefElementBloods>
<gdeBlood>
<n1>01</n1>
<n2>全血类</n2>
<n3>备注</n3>
</gdeBlood>
<gdeBlood>
<n1>02</n1>
<n2>半血类</n2>
<n3>备注果右是要右蚵啡是右果顺要林要中可晨</n3>
</gdeBlood>
</globalDefElementBloods>
</ns2:sendGlobalDefElementBloodReques>
</soap:Body>
</soap:Envelope>这是服务端收到的包,包体与文档中的不一致。
ID: 376
Address: http://192.168.0.100:8082/MyBloodReimburseInterface/dtoGlobalDefElementBlood?wsdl
Encoding: ISO-8859-1
Http-Method: POST
Content-Type: text/xml
Headers: {cache-con_trol=[no-cache], con_nection=[Keep-Alive], Content-Length=[1184], content-type=[text/xml], host=[192.168.0.100:8082], SOAPAction=[""], user-agent=[Borland SOAP 1.2]}
Payload: <?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"; xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/";><SOAP-ENV:Header SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"; xmlns:NS1="urn:dtoGlobalDefElementBlood">
<NS1:RequestSOAPHeader xsi:type="NS1:RequestSOAPHeader"><userName xsi:type="xsd:string">gzws</userName>
<password xsi:type="xsd:string">456</password></NS1:RequestSOAPHeader></SOAP-ENV:Header>//以下为包体
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"; xmlns:NS3="cn.myblood.reimburse.out.service">
<NS2:sendGlobalDefElementBloodReques xmlns:NS2="cn.myblood.reimburse.out.service"><globalDefElementBloods href="#2"/>
</NS2:sendGlobalDefElementBloodReques><NS3:models id="2" xsi:type="NS3:models"><brdInfo xsi:nil="true"/>
<gdeBlood href="#3"/></NS3:models>
<NS3:gdeBlood id="3" xsi:type="NS3:globalDefElementBlood">
<n1 xsi:type="xsd:string">01</n1><n2 xsi:type="xsd:string">全血类</n2>
<n3 xsi:type="xsd:string">测试备注¨</n3>
</NS3:gdeBlood>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>