WCF客户端引用全部DataContract类(引用未在ServiceContract中作为参数或返回值的DataContract类)
问题
WCF中如果某个DataContract类未在ServiceContract中作为WCF函数的参数或返回值,则WCF客户端“添加服务引用”时采用最小化策略不会自动在WCF客户端工程中生成这个类。
例如:你的DataContract类有10个,但是ServiceContract中WCF函数只使用了1个类,那么剩余9个类在客户端“添加服务引用”时是不会被自动生成的。
解决办法
1.分层(DataContract多个类作为独立Model类库,例如EntityModel.dll)可生成为dll
2.WCF的Service层引用此Model类库,例如EntityModel.dll
3.WCF的客户端拷贝此类库的dll(例如EntityModel.dll),将dll添加引用到工程中
4.WCF的客户端在“添加服务引用”时作特殊设置,勾选“重新使用引用的程序集中的类型”-“重新使用所引用的指定程序集中的类型”-勾选“EntityModel”,点击确定。 然后WCF代理类中不会再生成重复的实体类的定义了。
无图无真相,下列多图是对步骤四的贴图。
点击“高级”,弹出
关键在于此处的修改,勾选“重新使用引用的程序集中的类型”-“重新使用所引用的指定程序集中的类型”-勾选“EntityModel”,点击确定。
ok,此时展开右侧WCFService.TestConfigManage下Reference.svcmap下Reference.cs可见代理类中对应实体类的命名空间是EntityModel,而不是WCFService.TestConfigManage。
问题解决。