• 用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.
  • 相关阅读:
    python 基础文件操作
    python 基础之文件读操作
    python基础之省份三级菜单
    python 基础之字符串方法
    python 基础之字典一
    python 基础之简单购物车小程序实现
    c语言 四种方法调用数组
    c# windows编程控件学习-1
    c# windows编程控件学习-2
    C# 列主元素(Gauss)消去法 计算一元多次方程组
  • 原文地址:https://www.cnblogs.com/sonicit/p/768753.html
Copyright © 2020-2023  润新知