共享WCF服务和客户端之间的接口(标记为W / ServiceContract)

我正在使用VS2010和.NET 4.0。

我已经在这里检查过( 共享在WCF服务中实现的接口 ),但它的不同之处在于我要完成的工作涉及一个标有ServiceContract的接口。

即在服务中,我有一个接口A(标记为ServiceContract)和一个扩展接口B(也标记为ServiceContract)。 B由WCF服务实现。

确切的扩展如下:

public interface A public interface B : A 

(“SpecificType”标记为DataContract。)

显然,B在代理生成过程中暴露给WCF客户端; 但是,我还需要公开接口A(我正在实现一个半通用的pub / sub系统,而“发布者”需要能够检查/依赖接口A)。

我尝试解决这个问题的第一种方法是创建一个包含接口的独立“共享”程序集,并且可以由服务和客户端使用; 然而,最终效果不好,因为在发布者中,它需要确保B的实例实际上从A正确扩展。这种隐式转换失败,可能是因为服务引用似乎并不完全jive与“共享”程序集。

为了解决这个问题,我手动编辑了Re​​ference.cs文件并最终正常工作(我添加了接口A的定义,并确保接口B正确引用它)。 但这带来了一个很大的问题,即每次更新服务引用时,此代码都将被删除。

看过这个网站和其他网站上的其他WCF响应,我似乎找不到确切的答案(也许我只是没有完成所有这些和他们的回复)。

如果有人能指出我正确的方向,我会很感激。

谢谢。

提供对客户端(程序集或链接到.cs文件)的“原始”服务合同接口的访问。 那你有两个选择:

1)将自动生成的代理调用包装到您自己的类方法调用中(根据需要实现接口)。 服务参考更新不会伤害您。

2)不要使用自动生成的代理。 创建自己的代理(实现您的接口):

 var baseAddress = "net.tcp://localhost:4503/MyService"; var channelFactory = new DuplexChannelFactory(new InstanceContext(new MyNotificationReceiver()), //MyNotificationReceiver - WCF callback implementation class myNetTcpBinding, new EndpointAddress(baseAddress)); var proxy = channelFactory.CreateChannel(); proxy.MyMethod();