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

C# 如何在WCF客户端代理中公开接口中声明的事件?,c#,.net,wcf,events,C#,.net,Wcf,Events,我有以下情况: 一个服务合同接口(I接口) 在接口内声明的事件(稍后我将解释purpouse) 实现此接口的一个类,服务类(MyClass) 使用接口协定打开通道并获取代理类的客户端,该代理类公开所有实例的成员,包括事件 当我创建服务类的实例时,如: IInterface instance = (IInterface)new MyClass(); 从那里,我可以做到: instance.Event1 += OnEvent1; proxy.Event1 += OnEvent1; 但当我创

我有以下情况:

  • 一个服务合同接口(I接口)
  • 在接口内声明的事件(稍后我将解释purpouse)
  • 实现此接口的一个类,服务类(MyClass)
  • 使用接口协定打开通道并获取代理类的客户端,该代理类公开所有实例的成员,包括事件
当我创建服务类的实例时,如:

IInterface instance = (IInterface)new MyClass();
从那里,我可以做到:

instance.Event1 += OnEvent1;
proxy.Event1 += OnEvent1;
但当我创建代理客户端时:

IInterface proxy = new ChannelFactory<IInterface>(....);
但是不会从WCF服务器类实例调用
Event1
,对吗

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

if (Event1 != null)
  { Event1(); }
…什么都没发生?

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

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


WCF使用回调契约来实现事件。

尽管要点是正确的,但事件是一个.NET概念,而不是纯粹的C#。实际上,我的界面(契约)的事件在代理类的客户端中公开得很好。我可以绑定到它们。@user810917:这意味着您还没有从add service reference或svcutil在客户机上生成约定接口。您必须已复制粘贴接口定义或引用来自客户端的同一程序集,该程序集定义了服务器上的接口。是的,我没有生成代理类。我正在通过代码创建通道:IInterface proxy=new ChannelFactory(…);然后,在我的代理类中,事件是可用的,我可以绑定到它们。当然,不会发生任何事情,因为触发事件的代码在此代理类中不存在。但在我的场景中,代理类由另一个类包装,该类实际上可以复制服务器端的行为并触发事件。不管怎样,我现在明白了。无论如何,谢谢你。