gpt4 book ai didi

c# - 在 WCF 服务和客户端之间共享接口(interface)(标记为 w/ServiceContract)

转载 作者:行者123 更新时间:2023-11-30 12:11:35 25 4
gpt4 key购买 nike

我正在使用 VS2010 和 .NET 4.0。

我在这里检查过 (Sharing Interfaces that are implemented in WCF Service),但它的不同之处在于我要完成的工作涉及一个标有 ServiceContract 的接口(interface)。

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

确切的扩展名是这样的:

public interface A<T>

public interface B : A<SpecificType>

(“SpecificType”被标记为 DataContract。)

很明显,B在代理生成过程中暴露给了WCF客户端;但是,我也需要公开接口(interface) A(我正在实现一个半通用的发布/订阅系统,并且“发布者”需要能够检查/依赖接口(interface) A)。

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

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

查看了本网站和其他网站上的其他 WCF 回复后,我似乎无法找到确切的答案(也许我只是没有读完所有这些回复以及他们的回复)。

如果有人能指出正确的方向,我将不胜感激。

谢谢。

最佳答案

向客户端提供对“原始”服务契约(Contract)接口(interface)的访问(汇编或链接到 .cs 文件)。那么你有两个选择:

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

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

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();

关于c# - 在 WCF 服务和客户端之间共享接口(interface)(标记为 w/ServiceContract),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15176759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com