您好,登錄后才能下訂單哦!
本篇文章為大家展示了delphi中怎么調(diào)用webservice,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
1.把WSDL的URL地址放到了HTTPRIO的WSDLLocation參數(shù)中,然后選擇service和port
2.最近一個項目用到了delphi調(diào)用C#寫的web服務(wù)的功能。用了一天的時間找原因,終于測試通過了。
這是一個通過web服務(wù)把一個照片上傳到網(wǎng)站指定位置的方法。先測試了N次都不成功,通過跟蹤發(fā)現(xiàn)delphi根本沒傳過來任何值,通過查資料發(fā)現(xiàn)VS2005 默認(rèn)是用的 SoapDocumentProtocol而Delphi 是使用的 SoapRpcProtocol.這會造成所以客戶端傳過去的字符串變成null,需要在生成的接口單元的INITIALIZATION 部分加上一句:InvRegistry.RegisterInvokeOptions(TypeInfo(ServiceSoap), ioDocument);
搞定了。
服務(wù)代碼:
[WebMethod]
public int UploadFile(byte[] fs, string FileName)
{
try
{
///定義并實例化一個內(nèi)存流,以存放提交上來的字節(jié)數(shù)組。
///定義實際文件對象,保存上載的文件。
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);
//注意這一行,可在程序運行中動態(tài)改變服務(wù)地址,以前俺就不知道這個。
MyWSUpFile:=GetWSUpFileSoap(True,defWSDL,HTTPRIO1);
//MyWSUpFile:=HTTPRIO1 as WSUpFileSoap;
try
try
case (MyWSUpFile.UploadFile(fs,fileName)) of
0:MyShowMessage('用戶無權(quán)限');
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('調(diào)用web服務(wù)失?。?#39;);
end;
end;
上述內(nèi)容就是delphi中怎么調(diào)用webservice,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。