❶ WebService中遇到的問題。。怎樣在WebService中用到控制項
http://..com/question/300165045.html
這腔乎里伍巧悉已寬消回復
❷ webservice是什麼
當前,WebService是一個熱門話題。但是,WebService究竟是什麼?什麼情況下應該用WebService?什麼情況下不應該用WebService?是需要我們正確認識的。 Web Services是由企業發布的完成其特定商務需求的在線應用服務,其他公司或應用軟體能夠通過Internet來訪問並使用這項在線服務,它是一種構建應用程序的普遍模型,可以在任何支持網路通信的操作系統中實施運行;它是一種新的web應用程序分支,是自包含、自描述、模塊化的應用,可以發布、定位、通過web調用。Web Service是一個應用組件,它邏輯性的為其他應用程序提供數據與服務.各應用程序通過網路協議和規定的一些標准數據格式(Http,XML,Soap)來訪問Web Service,通過Web Service內部執行得到所需結果.Web Service可以執行從簡單的請求到復雜商務處理的任何功能。一旦部署以後,其他Web Service應用程序可以發現並調用它部署的服務。 在構建和使用Web Service時,主要用到以下幾個關鍵的技術和規則: 1.XML:描述數據的標准方法. 2.SOAP:表示信息交換的協議. 3.WSDL:Web服務描述語言. 4.UDDI:找到服務驅動器的的方法; 實際上,WebService的主要目標是跨平台的可互操作性。為了達到這一目標,WebService完全基於XML(可擴展標記語言)、XSD(XMLSchema)等獨立於平台、獨立於軟體供應商的標准,是創建可互操作的、分布式應用程序的新平台。由此可以看出,在以下三種情況下,使用WebService會帶來極大的好處。長項一:跨防火牆的通信 如果應用程序有成千上萬的用戶,而且分布在世界各地,那麼客戶端和伺服器之間的通信將是一個棘手的問題。因為客戶端和伺服器之間通常會有防火牆或者代理伺服器。在這種情況下,使用DCOM就不是那麼簡單,通常也不便於把客戶端程序發布到數量如此龐大的每一個用戶手中。傳統的做法是,選擇用瀏覽器作為客戶端,寫下一大堆ASP頁面,把應用程序的中間層暴露給最終用戶。這樣做的結果是開發難度大,程序很難維護。 舉個例子,在應用程序里加入一個新頁面,必須先建立好用戶界面(Web頁面),並在這個頁面後面,包含相應商業邏輯的中間層組件,還要再建立至少一個ASP頁面,用來接受用戶輸入的信息,調用中間層組件,把結果格式化為HTML形式,最後還要把"結果頁"送回瀏覽器。要是客戶端代碼不再如此依賴於HTML表單,客戶端的編程就簡單多了。 如果中間層組件換成WebService的話,就可以從用戶界面直接調用中間層組件,從而省掉建立ASP頁面的那一步。要調用WebService,可以直接使用MicrosoftSOAPToolkit或.NET這樣的SOAP客戶端,也可以使用自己開發的SOAP客戶端,然後把它和應用程序連接起來。不僅縮短了開發周期,還減少了代碼復雜度,並能夠增強應用程序的可維護性。同時,應用程序也不再需要在每次調用中間層組件時,都跳轉到相應的"結果頁"。 從經驗來看,在一個用戶界面和中間層有較多交互的應用程序中,使用WebService這種結構,可以節省花在用戶界面編程上20%的開發時間。另外,這樣一個由WebService組成的中間層,完全可以在應用程序集成或其它場合下重用。最後,通過WebService把應用程序的邏輯和數據"暴露"出來,還可以讓其它平台上的客戶重用這些應用程序。長項二:應用程序集成 企業級的應用程序開發者都知道,企業里經常都要把用不同語言寫成的、在不同平台上運行的各種程序集成起來,而這種集成將花費很大的開發力量。應用程序經常需要從運行在IBM主機上的程序中獲取數據;或者把數據發送到主機或UNIX應用程序中去。即使在同一個平台上,不同軟體廠商生產的各種軟體也常常需要集成起來。通過WebService,應用程序可以用標準的方法把功能和數據"暴露"出來,供其它應用程序使用。 例如,有一個訂單登錄程序,用於登錄從客戶來的新訂單,包括客戶信息、發貨地址、數量、價格和付款方式等內容;還有一個訂單執行程序,用於實際貨物發送的管理。這兩個程序來自不同軟體廠商。一份新訂單進來之後,訂單登錄程序需要通知訂單執行程序發送貨物。通過在訂單執行程序上面增加一層WebService,訂單執行程序可以把"AddOrder"函數"暴露"出來。這樣,每當有新訂單到來時,訂單登錄程序就可以調用這個函數來發送貨物了。長項三:B2B的集成 用WebService集成應用程序,可以使公司內部的商務處理更加自動化。但當交易跨越供應商和客戶、突破公司的界限時會怎麼樣呢?跨公司的商務交易集成通常叫做B2B集成。 WebService是B2B集成成功的關鍵。通過WebService,公司可以把關鍵的商務應用"暴露"給指定的供應商和客戶。例如,把電子下單系統和電子發票系統"暴露"出來,客戶就可以以電子的方式發送訂單,供應商則可以以電子的方式發送原料采購發票。當然,這並不是一個新的概念,EDI(電子文檔交換)早就是這樣了。但是,WebService的實現要比EDI簡單得多,而且WebService運行在Internet上,在世界任何地方都可輕易實現,其運行成本就相對較低。不過,WebService並不像EDI那樣,是文檔交換或B2B集成的完整解決方案。WebService只是B2B集成的一個關鍵部分,還需要許多其它的部分才能實現集成。 用WebService來實現B2B集成的最大好處在於可以輕易實現互操作性。只要把商務邏輯"暴露"出來,成為WebService,就可以讓任何指定的合作夥伴調用這些商務邏輯,而不管他們的系統在什麼平台上運行,使用什麼開發語言。這樣就大大減少了花在B2B集成上的時間和成本,讓許多原本無法承受EDI的中小企業也能實現B2B集成。長項四:軟體和數據重用 軟體重用是一個很大的主題,重用的形式很多,重用的程度有大有小。最基本的形式是源代碼模塊或者類一級的重用,另一種形式是二進制形式的組件重用。 當前,像表格控制項或用戶界面控制項這樣的可重用軟體組件,在市場上都佔有很大的份額。但這類軟體的重用有一個很大的限制,就是重用僅限於代碼,數據不能重用。原因在於,發布組件甚至源代碼都比較容易,但要發布數據就沒那麼容易,除非是不會經常變化的靜態數據。 WebService在允許重用代碼的同時,可以重用代碼背後的數據。使用WebService,再也不必像以前那樣,要先從第三方購買、安裝軟體組件,再從應用程序中調用這些組件;只需要直接調用遠端的WebService就可以了。舉個例子,要在應用程序中確認用戶輸入的地址,只需把這個地址直接發送給相應的WebService,這個WebService就會幫你查閱街道地址、城市、省區和郵政編碼等信息,確認這個地址是否在相應的郵政編碼區域。WebService的提供商可以按時間或使用次數來對這項服務進行收費。這樣的服務要通過組件重用來實現是不可能的,那樣的話你必須下載並安裝好包含街道地址、城市、省區和郵政編碼等信息的資料庫,而且這個資料庫還是不能實時更新的。 另一種軟體重用的情況是,把好幾個應用程序的功能集成起來。例如,要建立一個區域網上的門戶站點應用,讓用戶既可以查詢聯邦快遞包裹,查看股市行情,又可以管理自己的日程安排,還可以在線購買電影票。現在Web上有很多應用程序供應商,都在其應用中實現了這些功能。一旦他們把這些功能都通過WebService"暴露"出來,就可以非常容易地把所有這些功能都集成到你的門戶站點中,為用戶提供一個統一的、友好的界面。 將來,許多應用程序都會利用WebService,把當前基於組件的應用程序結構擴展為組件/WebService的混合結構,可以在應用程序中使用第三方的WebService提供的功能,也可以把自己的應用程序功能通過WebService提供給別人。兩種情況下,都可以重用代碼和代碼背後的數據。 從以上論述可以看出,WebService在通過Web進行互操作或遠程調用的時候是最有用的。不過,也有一些情況,WebService根本不能帶來任何好處。短處一:單機應用程序 目前,企業和個人還使用著很多桌面應用程序。其中一些只需要與本機上的其它程序通信。在這種情況下,最好就不要用WebService,只要用本地的API就可以了。COM非常適合於在這種情況下工作,因為它既小又快。運行在同一台伺服器上的伺服器軟體也是這樣。最好直接用COM或其它本地的API來進行應用程序間的調用。當然WebService也能用在這些場合,但那樣不僅消耗太大,而且不會帶來任何好處。短處二:區域網的同構應用程序 在許多應用中,所有的程序都是用VB或VC開發的,都在Windows平台下使用COM,都運行在同一個區域網上。例如,有兩個伺服器應用程序需要相互通信,或者有一個Win32或WinForm的客戶程序要連接區域網上另一個伺服器的程序。在這些程序里,使用DCOM會比SOAP/HTTP有效得多。與此相類似,如果一個.NET程序要連接到區域網上的另一個.NET程序,應該使用.NETremoting。有趣的是,在.NETremoting中,也可以指定使用SOAP/HTTP來進行WebService調用。不過最好還是直接通過TCP進行RPC調用,那樣會有效得多。 總之,只要從應用程序結構的角度看,有別的方法比WebService更有效、更可行,那就不要用WebService
❸ 如何在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.運行結果
❹ 為什麼我的VS2005工具箱里沒有WEBservice控制項
WEBservice是在添加新項的時候添加的 就像添加web窗體一樣的
❺ 用VB6來調用webservice的方法,該怎麼解決
通過
Inet 控制項
或
WebBrowser 控制項
(首冊先在工具箱梁芹斗內點右鍵,在《部件》選擇卡中選「控制項」,並橡磨鉤選Microsoft Internet Controls 和 Microsoft Internet Transfer Control 6.0)
❻ 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);
❼ C#編寫用戶自定義控制項時,引用web的webservice,提示錯誤
需要在初始化客戶端時指定終結點(endpoint)的配置名:
WeatherService.WeatherWSSoapClientclient=
newWeatherService.WeatherWSSoapClient("WeatherWSSoap");