【问题标题】:WCF Update Service Reference ErrorWCF 更新服务引用错误
【发布时间】:2012-09-21 15:14:55
【问题描述】:

我很绝望,我正在尝试更新对 WCF 服务(共享类型)的现有服务引用,但我不能。我已经尝试了在 Google 上找到的所有内容(social.msdn、stackoverflow、...),但我还没有找到解决问题的方法。

我有一个 ServiceContract,我添加了一个新的操作,如下面的代码:

[ServiceContract]
public partial interface IServiceDTO : IGenericServiceDTO<EntityDTO>    
{
        // Some OperationContracts working like
        [OperationContract]
        EntityDTO[] Method(int field);

        // NewMethod
        [OperationContract]
        OtherEntityDTO[] NewMethod(int field);
}

[DataContract]
public class EntityDTO {
    // Some properties working
}


[DataContract]
public class OtherEntityDTO {
    // Some properties working
    [DataMember]
    YetAnotherEntity NewProperty {get;set;}
}

当我尝试更新服务引用时,它会抛出以下错误:

尝试使用 WS-Metadata Exchange 或 DISCO 从“http://localhost:65499/Services/Acciones/ProcesoServiceDTO.svc”下载元数据。 错误:无法导入 wsdl:portType 详细信息:运行 WSDL 导入扩展时引发异常:System.ServiceModel.Description.DataContractSerializerMessageContractImporter 错误:引用类型“mpm.seg.ServiceModel.DTO.DataContracts.Acciones.ProcesoDTO,mpm.seg.ServiceModel.DTO.DataContracts,版本=1.0.0.0,文化=中性,PublicKeyToken=null”,数据合同名称为“ProcesoDTO”在命名空间“http://schemas.datacontract.org/2004/07/mpm.seg.ServiceModel.DTO.DataContracts.Acciones”中不能使用,因为它与导入的 DataContract 不匹配。 需要从引用的 types.XPath 中排除此类型到错误源://wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='IProcesoServiceDTO']

首先,我不完全理解这句话“...不能使用,因为它与导入的 DataContract 不匹配。” svcutil 如何尝试将引用类型与导入的 DataContract 匹配?我在客户端项目中引用了具有引用类型的项目,因为服务器和客户端在同一个解决方案中,但我尝试将它们分开并引用完全相同的 dll。

另外,当我尝试例如以下情况时它可以工作(将“OtherEntityDTO”的“NewProperty”写入EntityDTO),我不明白其中的区别:

[ServiceContract]
public partial interface IServiceDTO : IGenericServiceDTO<EntityDTO>    
{
        // Some OperationContracts working like
        [OperationContract]
        EntityDTO[] Method(int field);

        // NewMethod
        [OperationContract]
        OtherEntityDTO[] NewMethod(int field);
}

[DataContract]
public class EntityDTO {
    // Some properties working

    [DataMember]
    YetAnotherEntity NewProperty {get;set;}

}


[DataContract]
public class OtherEntityDTO {
    // Some properties working
}

请帮助我,并提前非常感谢。

【问题讨论】:

    标签: wcf service-reference


    【解决方案1】:

    抱歉,在我发布问题后,我发现了问题,这是一个已报告的错误 (http://blogs.msdn.com/b/distributedservices/archive/2010/02/04/wcf-client-issue-with-reuse-types-from-referenced-assemblies.aspx?wa=wsignin1.0)。另一个开发人员在父类上添加了这个属性(IsReference=true),我不知道。现在我必须解决这个错误,但这是另一场战斗。

    无论如何,我不明白为什么有时工作,有时不...

    谢谢。

    【讨论】:

      【解决方案2】:

      我遇到了类似的错误,但我的问题似乎有所不同。

      我有一个只读属性,但我一直收到该错误。当我将其更改为普通属性并添加一个集合(什么也没做)时,合同运行良好。

      【讨论】:

      • 是的,你的问题是不同的,如果你想使用一个属性作为DataMember,它必须被get和set才能通过WCF进行序列化/反序列化。观看此视频:StackOverflow thread
      猜你喜欢
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      相关资源
      最近更新 更多