为Java类型生成的重复C#Web服务代理类

时间:2009-09-24 15:04:25

标签: c# java web-services

我的问题是Java Web服务和C#.NET客户端之间的集成。

服务:带有宙斯盾数据绑定的CXF 2.2.3 客户端:C#,. NET 3.5 SP1

出于某种原因,Visual Studio为每个Java枚举生成两个C#代理枚举。生成的C#类不编译。

例如,这个Java枚举:

public enum SqlDialect {
    GENERIC, SYBASE, SQL_SERVER, ORACLE;
}

生成此WSDL:

<xsd:simpleType name="SqlDialect">
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="GENERIC" />
        <xsd:enumeration value="SYBASE" />
        <xsd:enumeration value="SQL_SERVER" />
        <xsd:enumeration value="ORACLE" />
    </xsd:restriction>
</xsd:simpleType>

对于此WSDL,Visual Studio生成两个部分C#类(已删除生成的注释):

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="SqlDialect", Namespace="http://somenamespace")]
public enum SqlDialect : int {

    [System.Runtime.Serialization.EnumMemberAttribute()]
    GENERIC = 0,

    [System.Runtime.Serialization.EnumMemberAttribute()]
    SYBASE = 1,

    [System.Runtime.Serialization.EnumMemberAttribute()]
    SQL_SERVER = 2,

    [System.Runtime.Serialization.EnumMemberAttribute()]
    ORACLE = 3,
}


[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3082")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://somenamespace")]
public enum SqlDialect {
    GENERIC,
    SYBASE,
    SQL_SERVER,
    ORACLE,
}

生成的C#代码无法编译:

The namespace 'somenamespace' already contains a definition for 'SqlDialect'

我会感激任何想法......

5 个答案:

答案 0 :(得分:1)

我发现“使”Visual Studio生成重复的代理类...我们的Web服务数据模型是多态的并使用抽象类 - 这就是我们使用Aegis数据绑定的原因。 如果层次结构中有多个抽象类,Visual Studio将生成重复的代理。

例如,在此Web服务合同中:

AbstractRestrictionDef getRestriction(...parameters...)

这些课程不起作用:

abstract class AbstractModelObject -– abstract class AbstractRestrictionDef –- class SqlRestrictionDef

但是这些类会:

abstract class AbstractModelObject -– class AbstractRestrictionDef -– class ParsedRestrictionDef

答案 1 :(得分:0)

对于某些WSDL,我已经生成了额外的代码(在我的例子中,是不存在的额外类成员)。这在尝试使用它时会引起问题,因此我只删除了我认为过剩的代码并开始工作。我会尝试删除其中一个枚举,看看会发生什么。

答案 2 :(得分:0)

尝试将服务引用添加为.net2引用;使用添加服务referance&gt;高级&gt;添加网络参考...

答案 3 :(得分:0)

你也可以尝试替代代理生成器http://wscfblue.codeplex.com/,这似乎可以解决这类问题。

答案 4 :(得分:0)

我认为使用visual studio 2008添加此WSDL,它应该支持SOAP 1.1,使用soapUI应用程序或类似应用程序检查此SOAP的版本。