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

时间:2013-03-02 16:32:26

标签: c# .net wcf inheritance publish-subscribe

我正在使用VS2010和.NET 4.0。

我在这里查了一下(Sharing Interfaces that are implemented in WCF Service),但不同之处在于我要完成的工作涉及 标有ServiceContract的界面。

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

确切的扩展如下:

public interface A<T>

public interface B : A<SpecificType>

(“SpecificType”标记为DataContract。)

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

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

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

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

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

感谢。

1 个答案:

答案 0 :(得分:3)

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

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

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

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

var proxy = channelFactory.CreateChannel();
proxy.MyMethod();