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.
  • 相关阅读:
    IOS、java支持DES加密
    多线程——@synchronized(object)
    LSM树存储模型
    System.setProperty()
    Filter及FilterChain的使用具体解释
    Java有用经验总结--Swing篇
    POJ3342——Party at Hali-Bula
    Hadoop-2.4.1学习之Writable及事实上现
    OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)
    Android中Context具体解释 ---- 你所不知道的Context
  • 原文地址:https://www.cnblogs.com/sonicit/p/768753.html
Copyright © 2011-2022 走看看