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.
  • 相关阅读:
    root用户javac可以执行sudo后command not found问题
    机器学习 KNN算法实现 (鸢尾花)
    机器学习 KNN分类算法简单介绍+数据集拆分
    机器学习的一般流程
    机器学习算法的性能评价
    Opencv 自带函数(Haar)的人脸检测
    Opencv 的基础认识
    labelme 的学习
    天梯赛总结CCCC
    VScode配置c,c++编译环境
  • 原文地址:https://www.cnblogs.com/sonicit/p/768753.html
Copyright © 2011-2022 走看看