gpt4 book ai didi

wcf - WCF 服务如何向其客户端引发事件?

转载 作者:行者123 更新时间:2023-12-03 07:31:56 25 4
gpt4 key购买 nike

我想知道WCF中有没有事件处理的方法。我在 WCF 中遇到了回调,但我想在 WCF 中进行事件处理。

我的要求是,我想向特定客户端引发事件,而不是向使用 WCF 中的事件处理的所有客户端引发事件,并且我还想维持 session 。

我在 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();
}

最佳答案

WCF中没有事件来通知客户端,但有一个回调 channel ,回调 channel 的目的与事件相同,尽管两种情况的工作原理完全不同。要通知特定客户端,您可以做的就是在订阅某个地方时存储该客户端的回调 channel (在这种情况下我更喜欢字典)。稍后您可以选择该实例并通过该 channel 调用您的回调方法,这样只有一个客户端会收到通知。

更新

如果您有兴趣,这里是代码:

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 - WCF 服务如何向其客户端引发事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5739501/

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