添加服务引用为枚举和方法创建重复的定义

Gui*_*ite 12 c# wcf navision visual-studio-2010 dynamics-nav

我正在使用Add Service ReferenceVisual Studio 2010中的功能将Navision Web服务添加到简单的Windows窗体应用程序中,生成引用但在代码内部存在重复的定义,这些定义会阻止代码编译,例如:

错误

命名空间"WindowsFormsApplication1.ServiceReference1"已经包含了"状态"下的定义:\垃圾桶\ WindowsFormsApplication1\WindowsFormsApplication1 \服务引用\ ServiceReference1\Reference.cs

Reference.cs我的内心

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1015")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:microsoft-dynamics-schemas/page/salesheaderpage")]
public enum Status {

    /// <remarks/>
    Open,

    /// <remarks/>
    Released,

    /// <remarks/>
    Pending_Approval,

    /// <remarks/>
    Pending_Prepayment,
}
Run Code Online (Sandbox Code Playgroud)

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="Status", Namespace="urn:microsoft-dynamics-schemas/page/salesheaderpage")]
public enum Status : int {

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

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

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

    [System.Runtime.Serialization.EnumMemberAttribute()]
    Pending_Prepayment = 3,
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试取消选中,Reuse types in referenced assemblies但在两种情况下仍然会生成重复的定义.

有任何想法吗?

编辑:页面是连接到标准表36(销售标题)的自定义页面

Ale*_*lex 8

问题似乎是序列化发生了两次:

//Xml Serializer
[System.Xml.Serialization.XmlTypeAttribute(...

//DataContract Serializer
[System.Runtime.Serialization.DataContractAttribute(...
Run Code Online (Sandbox Code Playgroud)

假设没有服务器端问题:

  • 首先要检查的是,本地没有任何具有相同名称的枚举,因为它经常会中断类型的重用.

  • 另外,使用Add Web Reference应该提供工作代码.

  • 如果其他要点没有解决问题(或者即使它们产生工作代码它们对你没用),我接下来尝试使用svcutil通过特定的序列化程序手动构建代理类.由于Dynamics服务应该是XML服务,我会选择/serializer:XmlSerializer(编辑:我错误地输入了命令行参数!)

该命令可能如下所示:

svcutil <ServiceURL> /Language:CS /target:Code 
/out:MyServiceProxy.cs /config:MyServiceProxy.config /serializer:XmlSerializer
Run Code Online (Sandbox Code Playgroud)

该工具的默认位置应该%ProgramFiles%\Microsoft SDKs\Windows\v6.0\Bin根据该工具的MSDN参考(Framework ver 4.0)


dan*_*ydk 5

以下是为我修复的内容:

  1. 像往常一样添加服务引用
  2. 在"解决方案资源管理器"中,选择切换"显示所有文件"图标
  3. 打开刚刚添加的服务引用的Reference.svcmap
  4. 改变线 <Serializer>Auto</Serializer>
  5. <Serializer>XmlSerializer</Serializer>
  6. 更新服务引用

似乎在某些版本的Visual Studio中,"添加服务引用"功能无法自动确定是否使用XmlSerializer和DataContractSerializer.所以上面强制它使用XmlSerializer.