Windows Service托管WCF:从Windows服务回调客户端

时间:2016-06-01 14:04:34

标签: c# wcf callback windows-services

我获得了由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服务传递给客户端。

1 个答案:

答案 0 :(得分:0)

好的,我现在所做的就是调用&#34; InitCallback&#34;来自客户端的功能并将ICallBack对象保存到字段中。 重用Windows服务中的回调对象,能够通过wcf服务从Windows服务与客户端进行通信。

为了工作,wcf服务必须以singelton的形式运行。可伸缩性不是一个问题。所以我很好。