189 8069 5689

delphi中怎么调用webservice

本篇文章为大家展示了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,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。


本文标题:delphi中怎么调用webservice
本文地址:http://jkwzsj.com/article/picgpp.html

其他资讯