我想實現一個SOAP客戶端來處理WSDL文件在此位置描述的Web服務的加利福尼亞工資稅的電子報告:FSET Service。在這個WSDL文件中,有幾個模式的引用,其中包括一個在http://schemas.xmlsoap.org/ws/2004/08/addressing處的引用,它似乎在它甚至到達OnBeforeExecute事件之前停止我的程序。如何爲SOAP客戶端完成XML
爲了讓這個項目脫穎而出,我試圖訪問在WSDL文件中聲明的Ping函數。
我剛剛在Delphi中獲得了SOAP客戶端創建的一些經驗。我正在使用德爾福2010年。這是我做到這一點。我使用WSDL導入器在上述地址導入文件。它爲我創建了一個名爲fsetservice的單元。然後,我添加了一個表單到我的項目中,我添加了一個HTTPRIO組件。我將組件的WSDLLocation設置爲WSDL文件的本地副本,在窗體上放置幾個TMemos以捕獲請求和響應頭並添加代碼來執行此操作。然後,我設置了一個按鈕,並在其OnClick事件,我寫了這個代碼:達到
procedure TForm1.Button1Click(Sender: TObject);
var sResponse: String;
begin
sResponse := GetFsetServiceSoap.Ping;
end;
當我按一下按鈕,我在我的HTTPRIO OnBeforeExecute事件斷點前得到這個消息:
對於 最終接收者頁眉http://schemas.xmlsoap.org/ws/2004/08/addressing:Action是必需的,但該消息
我知道我們應該只要求每個發帖一個問題,但不存在,有時你不知道夠隨便把一個好問題:
編輯:爲了節省時間給任何其他人提出同樣的問題,我把我在這些問題下找到的答案。
它看起來像HTTPRIO組件可能正在檢查從WSDL文件導入的XML是否完全針對WSDL中引用的模式。這看起來很酷,但它是真的嗎?
*答案:不正確,至少根據頁面底部的註釋http://www.tutorialspoint.com/wsdl/wsdl_definition.htm。根據筆記,模式沒有必要實際存在於該位置,它只需要唯一標識WSDL中使用的模式。*
在自動創建(和未修改)的GetFsetService函數中,我可以一路走到最後,錯誤發生在返回時,似乎沒有可能進入調用錯誤的實際進程。有沒有辦法做到這一點,我失蹤了?
答:我對此仍不確定,但似乎答案是否定的。無論如何,雖然從頭開始編寫這將會更乏味,但這是一個更好的解決方案,而不是等待WSDL嚮導出現奇蹟。
我有沒有想過說我需要實現爲我自動創建的FsetService接口?
答案:顯然不是。
我在Marco Cantu的書Mastering Delphi 2005中看到Borland(WebAppDbg.exe)提供了一個應用程序,允許您查看在特定端口上發送的HTTP。我嘗試過但沒有結果。這會有幫助嗎?如果是這樣,我應該使用什麼端口?
回答:使用Fiddler2工具。很好的發現。
我該如何克服這個錯誤?
回答:手動操作。
爲什麼要將WSDLLocation屬性指向本地文件?嘗試將其設置爲https://fsettestversion.edd.ca.gov/fsetproxy/fsetservice.asmx?WSDL – 2012-01-27 21:17:33
您是否使用內置的SOAP WSDL生成器來生成WSDL?顯示你打Ping的方式以及你的Ping通話設置。 – 2012-01-27 21:18:12
@WarrenP他在他的消息中提到了Delphi 2010 ... – 2012-01-27 21:20:31