我导入了一个WSDL并使用它来发送SOAP请求。它长这样:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<Calculate xmlns="urn:xx.WSDL.xxxxxWebService">
<ContractdocumentIn>
<AL>
...More XML...
问题在于Calculate元素中的xmlns="urn:xx.WSDL.xxxxxWebService"
部分。Web服务无法接受它。Web服务不喜欢这样的命名空间...
使用SoapUI,我发现这个请求完全正常:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:col="http://example.com.service.xxx/">
<SOAP-ENV:Body>
<col:Calculate>
<ContractdocumentIn>
<AL>
...More XML...
那么,如何将请求从第一种格式更改为第二种格式?(不能使用不正当手段!)
(如果重新导入可以得到正确的请求格式,则不是问题。)
再次强调:禁止使用不正当手段,例如篡改请求流来修改它!
虽然我还没有完全测试过,但似乎C#/VS2010和Delphi 2010也无法使用我正在尝试调用的Web服务。这个Web服务似乎是用Java编写的。SoapUI恰好是用Java编写的,因此我们有一个Java客户端与一个Java服务进行通信,看起来工作得很好。但其他任何客户端呢?
无论如何,现在是时候添加两个标签了:"Java",因为它是一个Java服务,以及"vs2010",因为.NET也不喜欢这个服务。
我本来想在.NET中编写一个包装器来调用这个服务,希望能够工作......但事实并非如此。所以这是一个非常严重的缺陷,可能是Java的缺陷......