加载中…
个人资料
小胖和猪猪
小胖和猪猪
  • 博客等级:
  • 博客积分:0
  • 博客访问:830,842
  • 关注人气:111
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

delphi2006调用C#的WebService

(2013-10-10 10:13:17)
标签:

美食

分类: 计算机
2013-10-10 周四
    传递中文参数老是报错。
解决方法如下:
(1)在uses中增加OPConvert引用;
(2)在主函数中加入以下内容:
  //add-------to support UTF-8
    RIO.HTTPWebNode.UseUTF8InHeader := true;  //添加该行,指定采用UTF-8代码传输
    RIO.Converter.Encoding:='UTF-8';
    RIO.Converter.Options:=RIO.Converter.Options + [soUTF8InHeader,soUTF8EncodeXML];
  //add-------END
添加的位置是以下代码的下面:
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;

(3)在文件的末尾,也就是 initialization 的最后加入以下语句:
InvRegistry.RegisterInvokeOptions(TypeInfo(SIPPlanApproval2009WebService_forAGSSoap),ioDocument);
这样,完整的initialization 就变成
initialization
  InvRegistry.RegisterInterface(TypeInfo(SIPPlanApproval2009WebService_forAGSSoap), 'http://unimap.com/', 'utf-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(SIPPlanApproval2009WebService_forAGSSoap), 'http://unimap.com/%operationName%');
  InvRegistry.RegisterInvokeOptions(TypeInfo(SIPPlanApproval2009WebService_forAGSSoap),ioDocument);
其中SIPPlanApproval2009WebService_forAGSSoap是服务名;根据你调用的webService不同而不同;
这样自动产生的文件就修改完成了;

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有