前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >delphi调用webservice问题总结

delphi调用webservice问题总结

作者头像
Vaccae
发布2019-07-24 11:24:13
2.2K0
发布2019-07-24 11:24:13
举报
文章被收录于专栏:微卡智享微卡智享

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;

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档