❶ 如何在delphi中調用WebService
Delphi 調用webservice介面
一、使用向導
1.導入wsdl文件:file--new----other----webservice---WSDLimporter---輸入wsdl地址
http//ww.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl
完成之後,即可導入wsdl文件。
註:結尾處的'?wsdl'不能少。
2.在導入的wsdl文件中手動添加部分注冊代碼:
InvRegistry.RegisterInterface(TypeInfo(qqOnlineWebServiceSoap), 'http://WebXml.com.cn/', 'utf-8');
InvRegistry.RegisterInvokeOptions(TypeInfo(qqOnlineWebServiceSoap),ioDocument);//此處必須手動添加,delphi無法自動生成
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(qqOnlineWebServiceSoap), 'http//WebXml.com.cn/qqCheckOnline');
3.調用代碼
4.運行結果
❷ delphi7 WebServices 讀取數據
delphi7可以做webservice
步驟:
服務端
file -> new -> other -> webservices -> soap server applicaion
然後選擇對應的發布平台(發布到apache下還是iis下)開發過程可以選擇 web app debugger
填上你的classname
這樣就創建了一個webservice 的服務端
然後在interface中聲明要發布的webservice介面,在class中實現這個介面,具體實現可以參考delphi安裝路徑下demo文件夾中webservice例子
客戶端:
啟動服務端
file -> new -> other -> webservices -> wsdl importer,然後把剛才發布的webservice server的wsdl文件路徑復制上,然後會生成代理類,然後調用這個代理類來訪問server
同樣在delphi文件夾下的demo文件夾中也有客戶端的例子
❸ 如何在delphi中調用WebService
首先服務端應該有介面文檔地址,類似的http://ip:port/interfacename?wsdl。在delphi中使用import wsdl導入介面文檔,在介面文檔中會有一個GetqqXXXWebServiceSoap的全局方法,你需要傳入一個httprio對象,調用此方法就會返回一個介面對象,通過這個介面對象就可以調用webservice的方法。
❹ java如何調用delphi寫的webservice
web service 一般是用 HTTP / HTTPS 協議來訪問的,也就是說只要對方給一個 WSDL 給我們並且說明了它處理這個請求的 URL 是什麼,我們就可以把我們的調用參數和方法名拼接成一個 xml 文件向這個 http URL 發送,然後接收它的回復 xml 再解碼數據就完成了。
你只要了解一個什麼叫 web service (具體來說,現在都是 SOAP 方式的),通信雙方是用 xml 通過 http 協議交互的,這個xml 文件包括一個你想要調用的操作名稱(它是一個xml tag),它有些子 tag 就是參數了。回復的 xml 也是類似,子tag 就是返回值或異常消息。
❺ delphi開發webservice IIS 配置不成功 wsdl在哪裡生成
下面說明如何編寫用於IIS發布的ISAPI類型的WebService。
1、 New|Other|WebServices|SOAP Server Application|這里先選擇建立Web App Debugger
類型的WebService,因為這種類型的WebService便於調試,當我們調試好它,准備發布時再將
此類型轉換為ISAPI類型。
2、 選擇Web App Debugger後,隨便輸入一個ClassName,這里我們輸入「Test」
3、 隨後Delphi會詢問你是否建立介面單元,選擇是,然後輸入介面的名字,我們輸入Main,
Delphi將自動建立介面單元(名字為你輸入的介面名+Intf結束,即MainIntf)和實現介面的單
元(名字為你輸入的介面名+Impl,即MainImpl)。到此一個空的WebService已建立好。
4、 接下來我們將編寫供別人調用的WebService函數。在此我們編寫一個簡單的例子。打開介面單元
(MainIntf),在Type後,介面聲明後添加介面函數
「function GetMsg(AMsg: string): String; stdcall;」,函數後面必須加上「stdcall」。
5、介面函數的聲明已經完成,下面就是要實現這個函數了。打開介面實現單元(MainImpl),
在public中寫上該函數的聲明,在implement後寫該函數的實現。
6、到此,WebService已經撰寫完畢。接下來是調試。在我們新建的時候,Delphi已經為我們
建立了一個Unit1和其窗體,在Unit1中引用介面單元(MainImpl),然後在窗體中加一個
按鈕,在按鈕的單擊事件中調用剛才寫的WebService函數就可以調試了,
7、調試成功後就可以轉類型了,將Web App Debugger類型轉換為ISAPI類型其實很簡單,我們
先重新建一個ISAPI類型的WebService項目,依次選擇New|Other|WebServices|
SOAP Server Application|ISPA/…,提示是否創建介面時選擇「是」,然後輸入和剛才一
樣的介面名,接著保存好,然後將調試成功的Web App Debugger類型的WebService項目中的
介面單元和介面實現單元復制替換掉剛剛創建的ISAPI類型項目中的介面單元和介面實現單元,
然後打開ISAPI類型的WebService,編譯生成dll。至此ISAPI類型的WebService建立成功。
8、將ISAPI類型的WebService發布到IIS上。在IIS中新建站點,新建時將執行許可權設置成「腳本
和可執行文件」,將WebService整個項目拷貝到站點文件夾下,啟動站點,該WebService就算
發布成功了,如果IIS是6.0以上的注意在Web服務擴展中將「所有未知ISAPI擴展」設置為允許,
具體設置可參見IIS幫助文檔。
9、如何用Delphi調用剛才寫的WebService。在瀏覽器中輸入剛才站點的路徑,如:
http://192.168.1.5:90/,瀏覽器轉到項目所在文件夾,
點擊bin,打開生成的dll文件夾,再點擊生成的dll文件,打開如下圖所示的的dll描述頁面,
該dll中有三個介面函數HZ,LJ,SaveData,它們都是供別人調用的介面函數。
點擊WSDL打開WSDL描述頁面,此時復制該頁面的網址,這個網址是我們要用到的。
10、 得到網址後,新建一個Application,我們就在這個Application中調用剛才的WebService。
依次點擊New|Other|WebServices|WSDL Import,如後提示輸入網址,我們輸入剛才復制的
網址,點擊next,finish,此時Delphi將自動添加一個單元,該單元就是調用WebService的
單元,有了這個單元我們就可以調用WebService了。在Unit1中引用該單元,再添加一個按鈕,
在按鈕的單擊事件中聲明一個介面對象,然後調用自動生成單元中的GetMainIntf(該方法是
自動生成的)函數給這個介面對象賦值,然後就可以用這個介面對象調用介面函數了。
❻ delphi中用DLL封裝WEBSERVICE介面 老是報內存錯誤,望高手指教
請檢查
打開「系統屬性」,請依次單擊「開始」、「控制面板」,然後雙擊「系統」。
單擊「高級」選項卡,之後單擊「性能」下的「設置」。
單擊「數據執行保護」選項卡。
看看是不是將你的dll做例外;
如果不是可能你無法調用webservice ;
❼ delphi調用webservice方法一直出錯,求助
請檢查打開「系統屬性」,請依次單擊「開始」、「控制面板」,然後雙擊「系統」。 單擊「高級」選項卡,之後單擊「性能」下的「設置」。 單擊「數據執行保護」選項卡。 看看是不是將你的dll做例外;如果不是可能你無法調用webservice ;
❽ 請教,用Delphi開發WebService資料庫系統
TADOQuery,TDataSource,TDBGrid
ADOQuery1設置ConnnectionString屬性連接資料庫或Connection屬性設置為其他連接資料庫的組件,如ADOConnection,
DataSource1的DataSet屬性設置為ADOQuery1,
DBGrid1的DataSource屬性設置為DataSource1。
然後你要查詢哪個表或哪些數據時,在ADOQuery1的SQL屬性輸入SQL語句。
或在代碼里這樣寫:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.add('select * from 表名');
ADOQuery1.open;
每次打開connect為true的時候總彈出個對話框,要輸入用戶名還有密碼
你是用TADOConnection連接資料庫的嗎?
是的話把ADOConnection的LoginPrompt屬性設置成False.
ADOQuery1:Missing SQL property:是因為你連接時,沒有SQL語句(ADOQuery1的SQL屬性是空的)。
❾ Delphi 調用WebService 直接發送SOPA報文
有一些WebService使用D7的HTTPRIO控制項已經不能正常調用了,
這個時候可以直接使用HTTPReqResp控制項直接發送報文,
或者使用TIdHTTP控制項 http post方式請求 webservices soap 協議介面
函數示例:
HTTPReq: THTTPReqResp;
function TDM_Demo.WebSrvMain( In_fkey_XML,In_funccode,In_fparam_XML:String):String;
var
DataMsg:WideString;
strStream, strSend: TStringStream;
begin
//使用SOPAUI等工具獲得標准示例報文DataMsg
DataMsg:='<?xml version="1.0" encoding="utf-8"?>'+
'<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"'+
' xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" '+
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '+
'xmlns:xsd="http://www.w3.org/2001/XMLSchema">'+
'<SOAP-ENV:Body>'+
'<m:funMain xmlns:m="http://services.dtshis/">'+
'<In_fkey_XML><![CDATA['+In_fkey_XML+']]></In_fkey_XML>'+
'<In_funccode>'+In_funccode+'</In_funccode>'+
'<In_fparam_XML><![CDATA['+In_fparam_XML+']]></In_fparam_XML>'+
'</m:funMain></SOAP-ENV:Body></SOAP-ENV:Envelope>';
strStream := TStringStream.Create('');
strSend := TStringStream.Create(AnsiToUtf8(DataMsg)); //Utf8轉碼
try
HTTPReq.url := ' 服務地址 ';
HTTPReq.Execute(strSend, strStream);
result := strStream.DataString;
result := UTF8Decode(result);
//xml < > " 轉碼
result := StringReplace(result,'<','<',[rfReplaceAll, rfIgnoreCase]);
result := StringReplace(result,'>','>',[rfReplaceAll, rfIgnoreCase]);
result := StringReplace(result,'"','"',[rfReplaceAll, rfIgnoreCase]);
//轉為delphi XMLDocument 文檔
result := StringReplace(result,'<?xml version="1.0" encoding="UTF-8"?>',
'<?xml version="1.0" encoding="gb2312"?>',[rfReplaceAll, rfIgnoreCase]);
finally
strStream.Free;
strSend.Free;
end;
end;
http post方式請求 webservices soap 協議介面
with IdHttp do
begin
ProtocolVersion := pv1_1;
AllowCookies := True;
ProxyParams.BasicAuthentication := False;
ProxyParams.ProxyPort := 0;
Request.ContentLength := -1;
Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
Request.BasicAuthentication := False;
Request.ContentType := 'application/x-www-form-urlencoded';
HTTPOptions :=[hoKeepOrigProtocol, hoInProcessAuth];
ReadTimeout:=5000;
end;
strSend.WriteString(DataMsg);
result:=IdHttp.Post(sWSDLAddr,strSend);