相关疑难解决方法(0)

当前的OperationContext在WCF Windows服务中为null

我正在尝试使用WCF设置发布/订阅系统,并且WCF服务器位于Windows服务中.绑定是net.TCP.该服务向客户端提供"订阅"方法,以便客户端可以将回调处理程序注册到将从链接到服务器的DLL引发的事件.在Subscribe方法中,我尝试使用OperationContext.Current.GetCallbackChannel方法获取回调通道.当我尝试这个时,OperationContext.Current属性返回NULL.

谁能告诉我在什么情况下这个属性会返回null?我错过了设置吗?我将在下面包含服务代码和接口代码.我在Visual Studio 2012和目标框架4.5中使用c#.

服务:

namespace WService
{
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class WcfPublisherService : IWcfPublisherContract
{
    IOALogic logic = new OAControlExample();
    IWcfSubscriberContract _callback = null;

    public void Subscribe()
    {
        _callback = OperationContext.Current.GetCallbackChannel<IWcfSubscriberContract>();
        logic.BarriersChanged += logic_BarriersChanged;
    }

    public void UnSubscribe()
    {
        logic.BarriersChanged -= logic_BarriersChanged;
    }

    void logic_BarriersChanged(object sender, BarriersChangedEventArgs e)
    {
        _callback.BarriersChanged(e.BarrierLines);
    }
}
}
Run Code Online (Sandbox Code Playgroud)

接口:

namespace WService
{
[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IWcfSubscriberContract))]
public interface IWcfPublisherContract
{
    [OperationContract(IsOneWay=false, IsInitiating=true)]
    void Subscribe();
    [OperationContract(IsOneWay = false, IsTerminating=true)]
    void UnSubscribe();
} …
Run Code Online (Sandbox Code Playgroud)

c# wcf callback operationcontext

7
推荐指数
2
解决办法
2万
查看次数

标签 统计

c# ×1

callback ×1

operationcontext ×1

wcf ×1