我正在使用VS2008创建对WCF服务的服务引用,但生成的引用文件定义了2个表示同一对象的类。任何想法为什么会这样?请看下面的结果 - THView和THView1是在我只期待THView时生成的。
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="THView", Namespace="http://schemas.datacontract.org/2004/07/CH.BusinessServices.Model")]
[System.SerializableAttribute()]
public partial class THView : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="THView", Namespace="http://tempuri.org/")]
[System.SerializableAttribute()]
public partial class THView1 : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
答案 0 :(得分:2)
服务文件是基于服务的元数据(WSDL)生成的,这个特定服务的元数据可以明确地定义两个不同的 THView类型。
它们可能看起来相似(它们具有相同的名称),但它们实际上是不同的,因为它们分别位于两个不同的命名空间中(注意DataContractAttribute的Namespace
属性)
http://schemas.datacontract.org/2004/07/CH.BusinessServices.Model
http://tempuri.org/
由于名称空间不同,因此类型被视为不同。这就是XML的工作原理。
看起来定义原始服务的开发人员忘记更改服务公开的一个或多个类型的默认XML命名空间 - 至少,http://tempuri.org/
是WCF中的默认命名空间。
强烈建议将默认命名空间更改为服务所有者“拥有”的命名空间。
答案 1 :(得分:0)
问题是,当您在app.config中已有信息时,您正在刷新引用,要解决此问题,请在刷新代理之前删除app.config信息,或者将代理重新创建到其他文件
谢谢, 塞巴斯蒂安