2011-02-03 33 views
1

我有一個非常不正常的(恕我直言)的錯誤,它的被提出每當我試圖做一個SOAP服務的請求:解組錯誤

解組錯誤:意外的元素(URI:「HTTP://www.domain。 com/ws/servicename /「,local:」dummyArg「)。預計元素< {} dummyArg>

那我打電話已經被定義爲的方法:

function GetData(const dummyArg: WideString): Array_Of_Data; stdcall;

我有SOAP經驗不多,因此我這個[]接近失去我的介意,我找不到任何有用的信息。 隨時提出任何問題,可能會加快找到問題的過程。

編輯:我使用德爾福2010年,我已經叫像這樣的方法: GetData(EmptyStr);GetData('null');GetData('{}');

謝謝您的時間。

回答

1

我設法找到一個乾淨的修復我的問題,只是替換從ioDocument到ioHasNamespace或ioHasAllSOAPActions單元的初始化部分調用選項和SOAP請求將被正確地生成,例如:

InvRegistry.RegisterInvokeOptions(TypeInfo(YourSoapInterface), ioDocument); 

變化到

InvRegistry.RegisterInvokeOptions(TypeInfo(YourSoapInterface), ioHasNamespace); 

InvRegistry.RegisterInvokeOptions(TypeInfo(YourSoapInterface), ioHasAllSOAPActions); 

這是我能找到這個問題的最乾淨的修復。

1

我認爲引發的異常類型爲ERemotableException(http://docwiki.embarcadero.com/VCL/en/InvokeRegistry.ERemotableException)對不對?這意味着該服務不喜歡該請求併發回一個故障; SOAP運行時在看到錯誤時會根據收到的消息引發本地異常。

基於什麼樣的服務說,

Unmarshalling Error: unexpected element (uri:"http://www.domain.com/ws/servicename/", local:"dummyArg"). Expected elements are <{}dummyArg>

...我認爲客戶端產生一個無效的XML請求。該服務可能需要支持2010年不支持的某些XML/SOAP結構。例如,D2010導入器/運行時假定每個操作的名稱空間請求/響應都與接口/端口類型相匹配。這通常是這種情況,但並非總是如此。在Delphi XE中,通過添加支持來註冊請求/響應的名稱空間,必要時解決此問題。在早期的運行時中可以對這些修補程序進行改進:問題首先是評估問題。

你可以發佈一個鏈接到WSDL的服務?通過訪問WSDL來調查這些問題要容易得多。謝謝。

乾杯,

布諾

+0

感謝您的評論,對這個問題是由德爾福提出的要求是不是有什麼服務期待,我很抱歉,但該WSDL是不公開的進一步更多爲了使用我您需要一個用戶名和密碼,這使得更難以讓某人訪問它。關於如何在Delphi 2010中繞過此問題的任何想法?謝謝Bruneau! – ComputerSaysNo 2011-02-04 07:12:31

0

我有同樣的問題。我的決定與這些不同。 要解決此問題,您應該在Delphi中的WSDL導入程序對話框中正確設置選項。在我來說,我選擇了2個額外的選項:

  • 「地圖純藏品包裝類類型(-ok)
  • 地圖字符串到WideString的(-ow)

重新生成應用程序和錯誤消失了。希望這會幫助別人。 enter image description here