Tag: 操作

将一个对象的方法传递给另一个对象是否保持第一个对象存活?

假设我有三个对象:’a’,’b’和’c’。 对象’a’和’c’是长寿命的,静态引用的服务单例。 对象’b’是短暂的,即没有静态引用使其保持活动状态。 现在假设对象’a’在其一个方法的范围内创建对象’b’的实例,例如 B b = new B(); 进一步假设B类看起来像这样: public B () { C.ActionList.Add ( SomeMethod ); } void SomeMethod () { … } 现在,对象’b’存活了多长时间? 我的推测是,它超出了调用其构造函数的方法的范围; 具体来说,只要它的方法仍然在对象’c’的’ActionList’中。 那是对的吗? 如果没有,它会被垃圾收集,当’c’运行’ActionList’中的所有方法时会发生什么? 额外的问题:如果’b’上的方法没有命名,但匿名并在构造函数中写入如下,该怎么办? public B () { C.ActionList.Add ( () => { … } ); }

当前的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(); logic.BarriersChanged += logic_BarriersChanged; } public void UnSubscribe() { logic.BarriersChanged -= logic_BarriersChanged; } void logic_BarriersChanged(object sender, […]