2009-01-20 63 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); 

这就够了...享受。