delphi中怎么调用webservice

发布时间:2021-06-24 16:01:11 作者:Leah
来源:亿速云 阅读:843

本篇文章为大家展示了delphi中怎么调用webservice,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。


1.把WSDL的URL地址放到了HTTPRIO的WSDLLocation参数中,然后选择service和port
2.最近一个项目用到了delphi调用C#写的web服务的功能。用了一天的时间找原因,终于测试通过了。

这是一个通过web服务把一个照片上传到网站指定位置的方法。先测试了N次都不成功,通过跟踪发现delphi根本没传过来任何值,通过查资料发现VS2005 默认是用的 SoapDocumentProtocol而Delphi 是使用的 SoapRpcProtocol.这会造成所以客户端传过去的字符串变成null,需要在生成的接口单元的INITIALIZATION 部分加上一句:InvRegistry.RegisterInvokeOptions(TypeInfo(ServiceSoap), ioDocument);
搞定了。
服务代码:

[WebMethod]
public int UploadFile(byte[] fs, string FileName)
{
  try
  {
    ///定义并实例化一个内存流,以存放提交上来的字节数组。
    ///定义实际文件对象,保存上载的文件。
    string FullFilename = Server.MapPath("photo\\") + FileName;
    if (File.Exists(FullFilename))
    {
       File.Delete(FullFilename);
    }
    FileStream f = new FileStream(FullFilename, FileMode.Create, FileAccess.Write);
    f.Write(fs, 0, fs.Length);
    f.Close();
    f = null;
    return 1;
  }
  catch
  {
    return 2;
  }
}


delphi客户端代码:

procedure TFrmUpLoad.btn2Click(Sender: TObject);
  function ReadFile(fileName:string): TByteDynArray;
  var
    fs:TFileStream;
    iSize:Int64;
  begin
    try
      fs:=TFileStream.Create(fileName,fmOpenRead);
      iSize:=fs.Seek(0,soFromEnd);
      SetLength(Result,iSize);
      fs.Seek(0,soFromBeginning);
      fs.ReadBuffer(Result[0],iSize);
    finally
      fs.Free;
    end;
  end;
var
  defWSDL,defURL,defSvc,defPrt :string;
  MyWSUpFile:WSUpFileSoap;
  fs: TByteDynArray;
  fileName:string;
begin
  fs:=ReadFile(edt1.Text);
  defWSDL := 'http://'+sysinfo.WZ+'/wsupfile.asmx?wsdl';
  defURL := 'http://'+sysinfo.WZ+'/wsupfile.asmx';
  defSvc := 'WSUpFile';
  defPrt := 'WSUpFileSoap';
  HTTPRIO1.WSDLLocation:=defWSDL;
  HTTPRIO1.Port:=defPrt;
  HTTPRIO1.URL:=defURL;
  HTTPRIO1.Service:=defSvc;
  HTTPRIO1.HTTPWebNode.UseUTF8InHeader:=true;  
  fileName:=HYBH+ExtractFileExt(edt1.Text);
  //注意这一行,可在程序运行中动态改变服务地址,以前俺就不知道这个。
  MyWSUpFile:=GetWSUpFileSoap(True,defWSDL,HTTPRIO1);
  //MyWSUpFile:=HTTPRIO1 as WSUpFileSoap;
  try
    try
      case (MyWSUpFile.UploadFile(fs,fileName)) of
        0:MyShowMessage('用户无权限');
        1:begin
            FrmHYGL.ADOQuery1.Edit;
            FrmHYGL.ADOQuery1.FieldByName('ZP').AsString:=fileName;
            FrmHYGL.ADOQuery1.Post;
            MyShowMessage('上传成功');
          end;
        2:MyShowMessage('上传失败');
      end;
    finally
      MyWSUpFile:=nil;
    end;
  except
    MyShowMessage('调用web服务失败!');
  end;
end;

上述内容就是delphi中怎么调用webservice,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. Delphi调用动态库
  2. 解决调用WebService

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

delphi webservice

上一篇:Delphi中怎么调用WebApi

下一篇:Oracle.ManagedDataAccess中怎么通过调用存储过程返回游标

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》