Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未在WCF客户端代理端问题上重用自定义集合类型_Wcf - Fatal编程技术网

未在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