zoukankan      html  css  js  c++  java
  • 用Delphi7 调用.NET 2.0的WebService 所要注意的问题

           Delphi7 调用VS.NET 2005开发的基于.NET 2.0的WebService时发生了错误。查阅资料 http://www.community.borland.com/article/borcon/files/4132/paper/4132.html 发现原来Delphi7客户端虽然支持WebService的RPC|Encoded 和 Document|Literal编码,但 默认的是使用RPC。而.NET 2.0下的WebService却是默认采用Documnet|Literal编码的。因此我们需要显示地声明让Delphi客户端采用Documnet|Literal编码就可以了。在Delphi的WSDL Importer产生了WebService的接口文件中加入如下行:
    initialization
      InvRegistry.RegisterInterface(TypeInfo(ServiceSoap), 
    'http://tempuri.org/''utf-8');
      InvRegistry.RegisterInvokableClass(ServiceSoapImpl);
      InvRegistry.RegisterDefaultSOAPAction(TypeInfo(ServiceSoap), 
    'http://tempuri.org/HelloWorld');
      InvRegistry.RegisterInvokeOptions(TypeInfo(ServiceSoap), ioDocument);
    //指明Delphi采用Document编码
    end. 

    如果需要在WebService中传送汉字的参数,则建议在Service.pas中再添加一行代码

    function GetServiceSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): ServiceSoap;
    const
      defWSDL 
    = 'http://localhost/myservice/service.asmx?wsdl';
      defURL  
    = 'http://localhost/myservice/service.asmx';
      defSvc  
    = 'Service';
      defPrt  
    = 'ServiceSoap';
    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;
      RIO.HTTPWebNode.UseUTF8InHeader :
    = True;  //添加该行,指定采用UTF-8代码传输
      try
        Result :
    = (RIO as ServiceSoap);
        
    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;

    需要说明的是使用Delphi2006则不需要上述的改变即可以正确调用VS.NET 2005书写的WebService.
  • 相关阅读:
    鼠标划过出现子菜单
    让dedecms(织梦)的list标签支持weight排序
    win7 64位无法安装网络打印机
    点击外部链接, 让iframe父页面也跟着显示
    C/C++指针(转)
    OO与设计模式的原则、目标 (转)
    页面添加QQ
    Windows Form 中的鼠标事件
    深入浅出C#消息
    初始化列表
  • 原文地址:https://www.cnblogs.com/shiningrise/p/1453102.html
Copyright © 2011-2022 走看看