3

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

我检查了 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

4

5 回答 5

4

哈哈它活着!!!

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

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

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

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

于 2009-02-25T17:37:16.730 回答
2

你应该在你的 WSDL 中评论这一行:

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

够了……享受吧。

于 2012-01-31T09:58:26.217 回答
1

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

查看:

- THTTPRIO.Converter.Options
- THTTPRIO.HTTPWebNode
- THTTPRIO.HTTPWebNode.InvokeOptions
于 2009-01-20T18:35:56.510 回答
1

我用头撞墙了两天,直到找到这篇文章……Cesars 暗示要检查 THTTPRIO.Converter.Options……我几乎尝试了所有方法,最后一个是将 soXXXXHdr 设置为 true -> 然后发生了一些奇怪的事情,服务器不再有空值:O ...

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

如果真正了解正在发生的事情的人能解释这一点,那就太好了。

于 2009-06-02T15:43:12.803 回答
1

从 Converter.Options 中删除 soSendMultiRefObj 有助于

于 2010-02-03T12:12:36.877 回答