【问题标题】:WCF Service Reference creates second classWCF 服务参考创建第二类
【发布时间】:2010-01-04 18:23:17
【问题描述】:

我正在使用 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 {

【问题讨论】:

    标签: wcf


    【解决方案1】:

    服务文件是根据服务的元数据 (WSDL) 生成的,而这个特定服务的元数据显然定义了两种不同的 THView 类型。

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      问题是当您在 app.config 中已有信息时正在刷新引用,要解决此问题,请在刷新代理之前删除 app.config 信息,或将代理重新创建到其他文件

      谢谢, 塞巴斯蒂安

      【讨论】:

        猜你喜欢
        • 2017-11-24
        • 1970-01-01
        • 1970-01-01
        • 2010-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多