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(销售标题)的自定义页面
问题似乎是序列化发生了两次:
//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)
以下是为我修复的内容:
<Serializer>Auto</Serializer><Serializer>XmlSerializer</Serializer>似乎在某些版本的Visual Studio中,"添加服务引用"功能无法自动确定是否使用XmlSerializer和DataContractSerializer.所以上面强制它使用XmlSerializer.