我正在使用用 Java 编写的第 3 方 Web 服务并使用 Apache Axis 1.3。该服务有许多重载操作。当 WCF Svcutil 生成代理时,它会通过在操作名称后附加一个数字来重命名重载操作。例如:
getDataResponse getData(getDataRequest request);
getDataResponse1 getData1(getDataRequest1 request);
这本身不是问题,但是当 Svcutil 生成请求/响应消息时,它会忽略更改 MessageContracts 的 WrapperName 属性。
[MessageContractAttribute(
WrapperName = "getData",
WrapperNamespace = "http://namespace.com",
IsWrapped = true)]
public partial class getDataRequest1 { .. }
当客户端应用程序尝试打开代理时,会抛出以下异常:
InvalidOperationException: RPC Message getDataRequest1 in operation getData1 has an invalid body name getData. It must be getData1
如果我更改 WrapperName = "getData1"代理将打开,但是......
有没有办法生成和/或修改代理,以便所有操作都与 WCF 一起工作?
标记
最佳答案
对于它的值(value)(4 年后),似乎通过调用 WSDL.exe
手动传递 /protocol:SOAP
参数,可以避免这个问题。对于 Apache Axis 生成的服务,从 VS2012 开始,通过 UI 生成服务客户端似乎仍然会导致此问题。
示例用法:
c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\NETFX 4.0 Tools>wsdl /l:cs /protocol:SOAP http://rxnav.nlm.nih.gov/RxNormDBService.xml /out:c:\drop\rxnavapi.cs
编辑: sphinxxx正确指出 SOAP 协议(protocol)选项在 UI 中显示为“Add Web Reference”,因此执行
wsdl.exe
直接不需要。
关于WCF:Svcutil 生成无效的客户端代理、Apache AXIS Web 服务、重载操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/799365/