未在WCF客户端代理端问题上重用自定义集合类型
我在类库项目中定义了以下类型未在WCF客户端代理端问题上重用自定义集合类型,wcf,Wcf,我在类库项目中定义了以下类型 [CollectionDataContract()] public class OperationException:System.Collections.Generic.Dictionary<string,ExceptionData> { [DataMember()] public bool ExceptionExists { get; set; } } [DataContract()]
[CollectionDataContract()]
public class OperationException:System.Collections.Generic.Dictionary<string,ExceptionData>
{
[DataMember()]
public bool ExceptionExists { get; set; }
}
[DataContract()]
public class ExceptionData {[DataMember()] public string Msg;}
我在客户端引用了OperationException类库。问题是,当我使用Add服务引用生成代理时,会生成类型为dictionary的OperationException的新定义。我确实将重用类型选项设置为true。我喜欢使用实际的“OperationException”类型,因为我必须将此对象传递给其他方法
提前谢谢
Iftikhar。您的客户端代理程序集是否有对添加类型的类库的项目引用
如果svcutil生成的代理不是您想要的,那么手工编写它们也非常容易。只需创建您自己的ClientBase派生类并在其上实现您的服务接口。然后,您就可以控制要重用的程序集类型。我也遇到了同样的问题,与您一样,我应用了CollectionDataContract属性,并告诉代理生成器重用共享程序集中的类型 修复不明显,您需要在客户端的Reference.svcmap文件中提供一个钩子,以告知生成器使用您的自定义集合类型 在Reference.svcmap中,按如下所示编辑CollectionMappings元素,然后更新服务引用:
<CollectionMappings>
<CollectionMapping TypeName="YourSharedAssemblyNamespace.OperationException" Category="List" />
</CollectionMappings>
有关更多信息,请参阅以下帖子:
我不知道为什么WCF代理生成器不只是使用常识来查找共享集合类型,而是在这里,将其记为WCF工具设计的另一个有趣之处。是的,我已将引用添加到“OperationException”类库中。我可以尝试使用自定义代理路由,但是您知道上面代码中的任何问题都可能导致意外行为。
<CollectionMappings>
<CollectionMapping TypeName="YourSharedAssemblyNamespace.OperationException" Category="List" />
</CollectionMappings>
/collectionType:YourSharedAssemblyNamespace.OperationException