2010-01-04 28 views
3

我正在使用VS2008创建对WCF服务的服务引用,但生成的引用文件有2个类定义表示同一个对象。任何想法,为什么会这样?看到下面的结果 - THView和THView1生成,而我只期待THView。WCF服务引用创建第二个类

[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 { 

回答

2

服务文件是基于服务的元数据(WSDL)产生的,而这种特定的服务的元数据apparantly定义了两种不同 THView类型。

它们可能看起来相似(它们具有相同的名称),但它们实际上是不同的,因为他们生活在两个不同的命名空间(注意DataContractAttribute的Namespace属性),分别

  • http://schemas.datacontract.org/2004/07/CH.BusinessServices.Model
  • http://tempuri.org/

因为名称空间不同,所以类型被认为是不同的。这就是XML的工作原理。

看起来定义原始服务的开发人员忘记更改服务公开的一个或多个类型的默认XML名称空间 - 至少http://tempuri.org/是WCF中的默认名称空间。

强烈建议将默认名称空间更改为服务所有者“拥有”的名称空间。

0

的问题是,你刷新引用时,你已经在App.config有信息,要解决这个问题,刷新代理之前删除的app.config信息,或重新创建代理到不同的文件

谢谢, Sebastian