【发布时间】: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