我是stackoverflow的新手但是我每天都使用它。今天我需要你,因为我在任何地方都没有这个信息。
我的问题是: 我希望通过回调客户端来提供服务,但我不想回调他们在服务中调用的函数。 (像订阅者/发布者) 我想保存回调实例。 然后我想要一个服务调用我的服务中的一个函数来触发回调(如下所示:callbacks.PrintMessage(“Message”));) 将回调实例保存在静态类的静态列表中。
调用callback.function()时出现此错误:“您正在使用Disposed对象” 因为我得到了这个实例:OperationContext.Current.GetCallbackChannel<“callback interface”>
如何保存回调实例?
非常感谢。
佩德罗
CODE:
//FUNCTION IN MY SERVICE
public void Subscribe()
{
var callback = OperationContext.Current.GetCallbackChannel<IMonitoringWebServiceCallback>();
callbacks.Add(callback);
callback = OperationContext.Current.GetCallbackChannel<IMonitoringWebServiceCallback>();
AlarmCallbackSingleton.Instance.AddCallback(callback);
//callback.PrintString("String"); //HERE IT WORKS! BUT I DONT WANT CALL HERE!
alarmInfoHandler = new AlarmInfoEventHandler(AlarmInfoHandler);
NewAlarmInfo += alarmInfoHandler;
}
//FUNCTION IN THE SAME SERVICE CALLED BY OTHER CLIENT
public void PublishAlarm(string alarm)
{
AlarmInfoEventArgs e = new AlarmInfoEventArgs();
e.Alarm = alarm;
NewAlarmInfo(this, e);
}
public void AlarmInfoHandler(object sender, AlarmInfoEventArgs e)
{
List<IMonitoringWebServiceCallback> callbacks = AlarmCallbackSingleton.Instance.GetCallbacks();
//EVERYONE THAT SUBSCRIBED SHOULD EXECUTE THIS (HERE I GET THE DISPOSED ERROR)
callbacks.ForEach(x => x.ShowString("String!"));
}
答案 0 :(得分:0)
确定。我知道了!这个问题的答案很简单:
当您订阅服务时,您需要保存某个位置(List等..)OperationContext而不是回调对象。 然后,当另一个客户端调用PublishAlarm时,事件将被触发,您需要获取订阅的所有客户端的OperationContext。 我将objetcs保存在静态列表(单例类)中仅用于示例。
然后:
public void AlarmInfoHandler(object sender, AlarmInfoEventArgs e)
{
var operation = AlarmCallbackSingleton.Instance.operationContext
var callback = operation.GetCallbackChannel<IMonitoringWebServiceCallback>();
callback.ShowAlarm(); //function you want to call
}
希望这可以提供帮助!