soap协议客户端实现(200)

  • 主题发起人 主题发起人 hanpengshan_00
  • 开始时间 开始时间
H

hanpengshan_00

Unregistered / Unconfirmed
GUEST, unregistred user!
别的系统给了一个wsdl,和xsd,用这个导入后生成了一个接口,但是接口里生成的方法有点奇怪procedure VoucherRecharge(const RequestHeader: RequestHeader; const VoucherRechargeRequest: VoucherRechargeRequest; out ResultHeader: ResultHeader; out VoucherRechargeResult: VoucherRechargeResult); stdcall;其中里面的参数都没有类型,RequestHeader是在xsd里定义的,加了几个自己定义的命名空间,问题: 1 这些参数类型为什么没有 2 如果有,应该是什么类型 3 如果从TSoapHeader继承来的头,往往只有属性,参考了delphi自带的webservice demo 也只是标准的命名空间,如何把自定义的命名空间加入
 
估计都是一些自定义的结构类型。
 
这不是有类型么?RequestHeader就是类型啊,冒号后面都是类型,可能是自定义类型。给你个真正的无类型函数参数看看吧:procedure ShowRecord2(var p); //无类型函数参数,begin ShowMessage( PRec(p)^.name ); //但是调用时候必须强制转化为具体指针类型。end;procedure ShowRecord(p: Pointer); //Pointer指针类型,兼容所有指针类型begin ShowRecord2(p);end;{ var,const,out型函数参数可以忽略其参数类型, out型参数只允许传出,不允许传入参数 const型参数只允许是常数,也叫常量参数 var型参数允许传入和传出,也就是所谓的变参,双向的。 如果函数参数不用var、const、out任何修饰符,那就是普通参数,只允许传入、不传出 也就是说函数参数里面调用了一个变量的值,怎么调用都没关系其值不会改变。}procedure UntypedVar(var a; const b; out c);begin if integer(a) = 1 then begin String(c):= 'man'; end else begin String(c):= 'women'; end;end;procedure TForm1.Button5Click(Sender: TObject);var sex: integer; c: string;begin sex:= 1; UntypedVar(sex, '1000000', c); ShowMessage(c);end;
 
虽然我不知道RequestHeader delphi这样声明有什么问题,不过有一点,RequestHeader在随wsdl一起分发过来的xsd是一个复杂的xml元素,看了些资料说的delphi导入wsdl可以自动生成这个对象,但是很失望没有生成RequestHeader对象,请问下手工怎么编写这个RequestHeader对象,我另外用xml binding把wsdl一同过来的xsd生成了个xml的读写接口,不知道是否可以用这个接口IXMLRequestHeader(或者TXMLRequestHeader)去转换这个RequestHeader对象进行传入这个soap 的header给服务器
 
后退
顶部