在尝试使用我使用 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