Delphi 2007没有正确使用JAX-WS Web服务

时间:2009-01-20 17:06:38

标签: delphi soap jax-ws

在尝试使用JAX-WS使用Java设置的Web服务时,我遇到了Delphi 2007的问题。 Web服务可以从其他Java程序和C#/ ASP.NET 2.0网站中正常使用。但是,当我尝试使用Delphi 2007(17-DEc-2007补丁)中的WSDL Importer访问相同的服务时,JAX-WS Web服务无法识别我传递的任何参数并使它们为空。 / p>

我已经检查了Delphi传递的SOAP消息并将其与其他消息进行了比较,它们几乎相同(除了一些可忽略的命名空间decs和.NET中的大量视图状态!)

我也一直在网上(最有用的链接是Bob博士的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

5 个答案:

答案 0 :(得分:4)

哈哈生活!!!

基本上我不得不拿出推荐的

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

并强制它使用秒。 5编码。根据需要生成命名空间,并将参数传递给Java Web服务。

对,需要啤酒,大量啤酒:)

答案 1 :(得分:2)

您应该只在WSDL中注释这一行:

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

这就够了......享受。

答案 2 :(得分:1)

不是你问题的解决方案,但我最近遇到了相同的环境问题。 我不得不多次更改选项,直到找到使用Web服务的正确方法(用C#编写)。

检查:

- THTTPRIO.Converter.Options
- THTTPRIO.HTTPWebNode
- THTTPRIO.HTTPWebNode.InvokeOptions

答案 3 :(得分:1)

我把头撞到墙上两天,直到我发现这个帖子......并且Cesars暗示检查THTTPRIO.Converter.Options ...我几乎尝试了所有事情,最后一个是将soXXXXHdr设置为true - &gt;然后发生了一些奇怪的事情,服务器没有更多的空:O ...

我不知道为什么这个设置让值通过,它只是(至少对我而言)。

如果真正理解发生了什么的人会解释这一点,那将会很棒。

答案 4 :(得分:1)

从Converter.Options中删除soSendMultiRefObj有助于