在尝试使用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
答案 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有助于