我正在使用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与“共享”集会。
为了解决这个问题,我手动编辑了Reference.cs文件并最终工作(我添加了接口A的定义,并确保接口B正确引用它)。但这带来了一个很大的问题,每次我更新服务引用时,这段代码都会被删除。
看过这个网站和其他网站上的其他WCF回复,我似乎无法找到确切的答案(也许我只是没有完成所有这些及其回复)。
如果有人能指出我正确的方向,我会很感激。
感谢。
答案 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();