我使用的是VS2010和.NET 4.0。共享WCF服务和客户端之间的接口(标有w/ServiceContract)
我已经在这里检查过(Sharing Interfaces that are implemented in WCF Service),但它的不同之处在于我试图完成的操作涉及一个接口,其标记为ServiceContract的是。
I.e.在服务中,我有一个接口A(标记为ServiceContract)和一个扩展接口B(也标记为ServiceContract)。 B由WCF服务实现。
确切扩展沿此线前进:
public interface A<T>
public interface B : A<SpecificType>
(“SpecificType”被标记为DataContract)
显然,B暴露在WCF客户端在代理生成的处理;然而,我还需要公开接口A(我正在实现一个半通用的发布/订阅系统,“发布者”需要能够检查/依赖接口A)。
我试图解决这个问题的第一种方法是创建一个单独的“共享”程序集,其中包含接口并可以被服务和客户端使用;然而,这最终不能很好地工作,因为在发布者中,它需要确保B的实例实际上从A正确扩展。这种隐式转换失败,可能是因为服务引用似乎并不完全与“共享”程序集合在一起。
为了解决这个问题,我手动编辑了Reference.cs文件,它结束了工作(我添加了接口A的定义并确保接口B正确地引用了它)。但是这造成了一个很大的问题,因为每次我更新服务引用时,这些代码都会被清除。
看了看本网站和其他人的其他WCF回复,我似乎无法找到确切答案(也许我只是没有完成所有答案和答案)。
如果有人能指出我正确的方向,我会很感激。
谢谢。
建议2是正确的方法。如果我控制客户端和服务器,我从不使用服务引用/自动生成代理 – 2013-03-03 21:11:56
有趣。因此,对于#2,如果我需要对服务的接口进行更改,那意味着我必须将接口的更改复制/复制到客户端?如果是这样,这似乎是一个很好的方式来引入潜在的错误/错误。但是,如果这是做到这一点的唯一方法,那么如果我想完成我所追求的目标,我想我没有多少选择。这些是唯一的选择吗? (虽然,很清楚,我非常感谢关于此的讨论/建议。) – BtySgtMajor 2013-03-04 03:09:02
我认为检查/依赖服务接口/类型层次结构不是SOA的良好实践,因为WCF服务应该可以互操作。所以我认为你可能需要为你的服务引入一些特殊的“检查/获取/验证目的”接口/方法。但依靠客户端基本上是正确的。 – SalientBrain 2013-03-04 06:21:31