WCF:Svcutil 生成无效的客户端代理、Apache AXIS Web 服务、重载操作

标签 wcf wsdl svcutil.exe

我正在使用用 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"代理将打开,但是......
  • 我无法调用该操作,因为服务无法识别“getData1”
  • 该服务有近 1100 次操作,其中近一半是重载

  • 有没有办法生成和/或修改代理,以便所有操作都与 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/

    相关文章:

    WCF net.tcp 连接在 9 小时 1 分钟后终止

    c# - 在 WCF 服务和客户端之间共享接口(interface)(标记为 w/ServiceContract)

    visual-studio - 未定义的复杂类型用作复杂类型扩展的基础

    .net - 如何确定要在我的 svcutil 命令行中包含哪些架构文件 (xsd)?

    c# - WCF 客户端日志记录 dotnet 核心

    .net - 服务不可用 - 应用程序池无法启动

    sql - OData 是否旨在用于政府和金融环境?我需要什么安全预防措施?

    java - 如何测试 Web 服务/WSDL

    java - 多个 XSD 覆盖类

    wcf - svcutil 从生成的接口(interface)代理中省略 ServiceKnownType 属性