问题描述
WCF服务,客户端可以通过添加服务引用自动生成代理类的!问题来了,在一个项目中添加不同的WCF服务引用,生成的代理类有时有很多类型是重复被代理生成的。比如:添加服务地址A的服务引用,创建出来一个类型A.ClassA,再添加另一个服务地址B的服务引用,又创建出来一个类型B.ClassA,这两个类型在服务端其实都是一个类型定义,只是两个服务接口使用了相同的这个类型ClassA。那么客户端在使用ClassA时有些麻烦,因为添加了多个WCF服务引用,相同类型ClassA的命名空间会不同,有时会造成二义性或两个不同命名空间下的ClassA相互赋值和转换问题。这种现象,在实际做项目时是怎么避免的,应用了哪些好的解决方法?
解决方案
解决方案二:
代理类生成时可以选择契约是用项目中已存在的数据契约,默认是自动创建
解决方案三:
引用1楼starfd的回复:
代理类生成时可以选择契约是用项目中已存在的数据契约,默认是自动创建
是怎么选择契约的呢?可以给个例子吗
解决方案四:
添加服务引用--高级
解决方案五:
[ServiceContract]publicinterfaceITestService1{[OperationContract]TestCustomDataGetVal1();}[ServiceContract]publicinterfaceITestService2{[OperationContract]TestCustomDataGetVal2();}publicclassTestService1:ITestService1{publicTestCustomDataGetVal1(){returnnewTestCustomData(){Name="x1",Age=12};}}publicclassTestService2:ITestService2{publicTestCustomDataGetVal2(){returnnewTestCustomData(){Name="x2",Age=24};}}[DataContract(Name="TcData",Namespace="http://www.cnblogs.com")]publicclassTestCustomData{publicstringName{get;set;}publicintAge{get;set;}}
客户端我添加两个服务引用,配置“始终生成消息约定”,分别是TestService1Reference和TestService2Reference,生成客户端代理,在代码中定义TcDatadata;同样,会报错CS0104,“TcData”是“TestService1Reference.TcData”和“TestService2Reference.TcData”之间的不明确的引用