我获得了由Windows服务托管的wcf服务。 Windows服务侦听USB驱动器(删除和插入。 现在我想通知客户。
我试图先从Windows服务中调用wcf服务中的静态方法 然后我通过
调用Callback方法OperationContext.Current.GetCallbackChannel<ICallback>()
但是OperationContext.Current始终为null。似乎我的错误线程/背景。
尝试在wcf服务中声明一个静态事件,然后在wcf中注册它并从wcf服务中的Windows服务调用一个静态方法,然后激活该事件:
//WCF Service
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class WCFService : IService
{
public static event EventHandler<EventArgs> StatusChanged;
public Service()
{
StatusChanged += OnStatusChanged;
}
private void OnStatusChanged(object sender, EventArgs eventArgs)
{
// still not in the correct thread here?
// OperationContext.Current is null
OperationContext.Current.GetCallbackChannel<ILocalLicenceBackendServiceCallback>().ServiceStateChanged();
}
public static void ChangeStatus()
{
if (StatusChanged != null)
StatusChanged(null,EventArgs.Empty);
}
}
//Windows Service
public partial class WindowsService : ServiceBase
{
private void OnStatusChanged()
{
WCFService.ChangeStatus();
}
}
..仍然无法正常工作。那么我该怎么做呢,通过wcf回调将信息从windows服务传递给客户端。
答案 0 :(得分:0)
好的,我现在所做的就是调用&#34; InitCallback&#34;来自客户端的功能并将ICallBack对象保存到字段中。 重用Windows服务中的回调对象,能够通过wcf服务从Windows服务与客户端进行通信。
为了工作,wcf服务必须以singelton的形式运行。可伸缩性不是一个问题。所以我很好。