我正在尝试使用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)