小编dah*_*ook的帖子

按名称动态调用SOAP方法?

我正在使用Delphi XE2与相当大的SOAP服务进行通信.我已经成功导入了wsdl,一切正常.但是,我发现自己编写了很多类似的代码.我想有一个调用我的Web服务的通用方法.我也发现很难像现在这样多线程化我的代码,因为我必须为每种类型的调用编写这么多代码.

作为一个周末程序员,我远远没有掌握德尔福的进出,但我认为我至少对RTTI有一个公平的理解,我认为必须用它来做我想要的.

Web服务有大约700种不同的方法,这几乎是问题所在.从wsdl生成的代码具有如下方法:

function  addPhone(const Params: addPhone): addPhoneResponse; stdcall;
function  updatePhone(const Params: updatePhone): updatePhoneResponse; stdcall;
function  getPhone(const Params: getPhone): getPhoneResponse; stdcall;
function  removePhone(const Params: removePhone): removePhoneResponse; stdcall;
function  listPhone(const Params: listPhone): listPhoneResponse; stdcall;
function  addStuff(const Params: addStuff): addStuffResponse; stdcall;
function  updateStuff(const Params: updateStuff): updateStuffResponse; stdcall;
...
... about 700 more of the above
Run Code Online (Sandbox Code Playgroud)

基本上,大约有700种不同类型的东西可以处理,并且它们都有添加,更新,获取,删除和列表方法.每次调用时,都有一个相应的类,用作SOAP请求的参数.如上所示,还有一个相应的响应类.

这些类看起来像(非常简化):

addStuff = class
  private
    FStuff: string;
  published
    property stuff: string  Index (IS_UNQL) read FStuff write FStuff;
  end;
Run Code Online (Sandbox Code Playgroud)

所以,当我调用Web服务时,我会这样做:

procedure CreateStuff;
var
    req:    addStuff;
    res: …
Run Code Online (Sandbox Code Playgroud)

delphi soap rtti delphi-xe2

14
推荐指数
1
解决办法
2352
查看次数

标签 统计

delphi ×1

delphi-xe2 ×1

rtti ×1

soap ×1