我的第一个问题希望它合适:
共享接口组装- 我有一个“共享”程序集,它有一个接口,我们称之为它IDocRepository
。它标有[ServiceContract]
并且有几个[OperationContract]
- 标记方法。
WCF 实现组件- 我有两个 WCF 服务项目,每个项目都引用共享程序集,每个项目都将该接口实现为 WCF 服务。
消费者组装- 最后,我有一个“客户端”项目,也引用共享程序集,并引用两个 WCF 服务中的每一个。
但是,在使用者程序集中生成的服务引用源自自动生成的接口版本:
public partial class ExampleClient : System.ServiceModel.ClientBase<SomeNamespace.ExampleSvcRef.IDocRepository>, SomeNamespace.ExampleSvcRef.IDocRepository {
我所期望的
我希望这两个引用都会自动继承我定义的接口,消费者/客户端程序集也引用该接口。有点像它为参数和返回类型提供的类的重用,但针对的是服务接口。
Why
这样我就可以创建任一服务引用代理的实例并将其转换为我的接口类型。
所以我可以每次手动修改生成的代码,但应该有更好的方法......?
(编辑:我确实为两个服务引用选择了“在引用的程序集中重用类型”和“在所有引用的程序集中重用类型”选项)
“重用引用程序集中的类型”仅允许您重用数据协定,而不是服务协定。如果您想共享服务合同,则根本不需要使用“添加服务引用”。你可以只使用通道工厂 http://msdn.microsoft.com/en-us/library/ms576132.aspx直接地。
// Supply the binding and address in code
Binding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://tempuri.org/address");
IServiceContract channel = ChannelFactory<IServiceContract>.CreateChannel(binding, address);
// Or read them from the config file
ChannelFactory<IServiceContract> channelFactory = new ChannelFactory<IServiceContract>();
IServiceContract channel = channelFactory.CreateChannel();
通道对象还将实现通讯对象 http://msdn.microsoft.com/en-us/library/system.servicemodel.icommunicationobject.aspx,因此如果您需要调用 Open() 或 Close() 等方法,则可以强制转换它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)