2009-01-20 65 views
3

我在嘗試使用我在JAX-WS中使用Java設置的Web服務時遇到了Delphi 2007問題。 Web服務可以很好地從另一個Java程序和C#/ ASP.NET 2.0網站上使用。但是,當我嘗試使用Delphi 2007中的WSDL Importer(17-DEc-2007修補程序)訪問相同的服務時,JAX-WS Web服務不會識別我傳遞它並將它們置之零的任何參數。Delphi 2007沒有正確使用JAX-WS web服務

我檢查了Delphi傳遞的SOAP消息,並將它與其他人進行了比較,它們幾乎完全相同(除了一些可忽略的名稱空間decs和.NET的一大堆視圖狀態! )

我也一直在網絡上(最有幫助的鏈接是博士的http://www.bobswart.nl/Weblog/Blog.aspx?RootId=5:798),但沒有喜悅。

有沒有人遇到過這個?

TIA。


傳奇仍在繼續!

在使用HTTPRIO對象試圖讓它工作後,我最終放棄了並試圖通過HTTP進行直接的XML傳輸。失敗。

好的,所以我在C#中建立了一個簡單的測試器,並嘗試過。工作沒問題。

使用Fiddler來查看向後和向前發送的內容,似乎唯一的區別在於命名空間。我改變了Delphi中的XML發送命名空間,並且......它的工作原理!

這是由WSDLImporter生成原始XML的一個樣本:

<?xml version="1.0"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Body> 
     <version xmlns="http://path.to.service.com/"> 
      <input>test</input> 
     </version> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

,這裏是什麼實際工作:

<?xml version="1.0"?> 
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
    <S:Body> 
     <ns2:version xmlns:ns2="http://path.to.service.com/"> 
      <input>test</input> 
     </ns2:version> 
    </S:Body> 
</S:Envelope> 

所以,現在我知道這一點,我做我去更改WSDLImporter代碼的名稱空間值?我無法在HTTPRIO屬性中看到任何明顯的東西。

TIA

回答

4

哈哈它的生命!

基本上,我不得不拿出建議

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

,並強制使用二段。 5編碼。命名空間根據需要生成,並將參數傳遞給Java Web服務。

權,需要啤酒,很多啤酒:)

+0

我可以驗證註釋掉該行是否解決了JAX-WS Web服務的問題。我無法驗證許多啤酒的功效,但;-) – 2010-05-14 12:35:06

1

不是你的問題的解決方案,但我已經用同樣的環境下最近一直陷入困境。 我不得不多次更改選項,直到找到正確的方式來使用web服務(用C#編寫)。

檢查:

- THTTPRIO.Converter.Options 
- THTTPRIO.HTTPWebNode 
- THTTPRIO.HTTPWebNode.InvokeOptions 
+0

再次感謝塞薩爾!我認爲你需要給我你的快速撥號;) – 2009-01-20 19:02:15

+0

對不起,忘記標記你的答案! – 2009-01-23 17:14:18

+0

很高興知道它可以幫助你。 – 2009-01-23 18:06:43

1

我撞我的頭靠牆兩天,直到我發現這個職位...和Cesars提示檢查THTTPRIO.Converter.Options ...我嘗試了幾乎所有的東西,最後一個是將soXXXXHdr設置爲true - >然後發生了一些奇怪的事情,沒有更多的零到服務器:O ...

我不知道爲什麼這個設置會使值經歷,它只是做(至少對於我來說)。

如果有人真正瞭解發生了什麼會解釋這一點,那將會很棒。

1

從Converter.Options刪除soSendMultiRefObj幫助

2

你應該只註釋此行您的WSDL:

//InvRegistry.RegisterInvokeOptions(TypeInfo(WebService), ioDocument); 

這就夠了...享受。