如何在WCF客户端代理中公开的接口中声明事件

本文关键字:接口 声明 事件 WCF 客户端 代理 | 更新日期: 2023-09-27 18:19:28

我有以下场景:

  • 服务合同的一个接口(IInterface)
  • 接口内声明的事件(稍后我将解释用途)
  • 实现这个接口的一个类,服务类(MyClass)
  • 使用接口协定打开通道并获得代理类的客户端,该代理类公开所有实例的成员,包括事件

当我创建一个服务类的实例时,比如:

IInterface instance = (IInterface)new MyClass();

从那里,我可以做:

instance.Event1 += OnEvent1;

但当我创建代理客户端时:

IInterface proxy = new ChannelFactory<IInterface>(....);

Event1是如何在代理客户端中公开的?它们只是代理端的事件,对吗?它们与服务器类完全断开了连接,对吧?

所以,我可以做:

proxy.Event1 += OnEvent1;

但是Event1永远不会从WCF服务器类实例调用,对吗?

如果WCF服务器类执行如下事件检查会发生什么:

if (Event1 != null)
  { Event1(); }

什么都没发生?

如何在WCF客户端代理中公开的接口中声明事件

C#事件是一个C#构造。它与C#语言绑定。WCF不会在其端点上公开此类构造。

如果IInterface是您的服务合同,并且有一个C#事件。在客户端代理生成的IInterface上,此事件将不可见/不创建。

WCF使用回调协定来实现事件。