WCF服务如何将事件提交给客户?

我想知道在WCF中是否有事件处理的方法。 我遇到过WCF中的callback,但我想在WCF中做事件处理。

我的要求就像我想提高事件给特定的客户端,而不是所有的客户在WCF中使用事件处理,我也想保持会话。

我已经在WCF中看到了处理callback的发布者/订阅者模型,但是这个模型发布给所有已经订阅的客户端,但是我只想发布给选定的客户端。

我认为可以使用WCF中的事件来完成。

客户端 :

public class Callbacks : IServiceCallback { public void CallToMyClient(string name) { this.CallToMyClient(name); } } protected void Page_Load(object sender, EventArgs e) { Callbacks callback = new Callbacks(); ServiceClient client = new ServiceClient(new InstanceContext(callback)); client.SubscribeClient(); client.DoSomeWork(); } 

你不能使用事件。 您可以使用callback模拟事件。

在WCF中没有事件通知它的客户端,但是有一个callback通道,callback通道的目的和事件一样,尽pipe两者的工作原理是完全不同的。 要通知一个特定的客户端,你可以做的是在订阅某个地方时,该客户端的存储callback通道(在这种情况下,我更喜欢Dictionary)。 稍后,您可以select实例并通过该通道调用您的callback方法,这样做只有一个客户端会收到通知。

UPDATE

如果你对这里感兴趣的话是这样的代码:

 public interface IClientCallback { //Your callback method [OperationContract(IsOneWay = true)] void CallToMyClient(string name); } [ServiceContract(CallbackContract = typeof(IClientCallback))] public interface ITestService { [OperationContract(IsOneWay = true)] void SubscribeClient(); [OperationContract(IsOneWay = true)] void DoSomeWork(); } [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Reentrant)] public class ServiceImplementation : ITestService { private static readonly List<IClientCallback> CallbackChannels = new List<IClientCallback>(); /// <summary> /// client should call this method before being notified to some event /// </summary> public void SubscribeClient() { var channel = OperationContext.Current.GetCallbackChannel<IClientCallback>(); if (!CallbackChannels.Contains(channel)) //if CallbackChannels not contain current one. { CallbackChannels.Add(channel); } } public void DoSomeWork() { //Here write your code to do some actual work //After you done with your work notify client //here you are calling only the first client that is registered IClientCallback callbackChannel = CallbackChannels[0]; callbackChannel.CallToMyClient("You are the only one receving this message"); } } 

WCF双操作和UI线程由jeff.barnes

也许这可以帮助你。

WCF不支持事件处理程序。 回拨通道是它的方式

如果您使用WCF进行RPC(与Web服务相关或rest),则可以使用.Net Remoting来执行事件调用跨进程。