【发布时间】:2016-08-23 21:36:11
【问题描述】:
我正在使用推荐的 InstanceContextMode.Single 服务行为编写一个简单的 Windows WCF 服务作为单例,例如:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
我的代码如下所示(已编辑:修改以反映评论者建议的更改)。问题是,我如何从构造函数中得知对我的服务的第一次调用已经完成?也就是说,当单例第一次(也是唯一一次)实例化时?通过调试器进行的大量测试表明构造函数从未被调用过。
我需要在第一次调用服务时进行一些特殊处理,而构造函数似乎是执行此操作的合乎逻辑的地方。但是,我尝试在构造函数中放置一些简单的代码,甚至无法在此处设置断点(使用远程调试)。如果我使用 InstanceContextMode.Single 路由,就好像从未真正调用过构造函数(与具有静态类和对对象的静态引用的旧经典方法相反,检查对它的引用构造函数中的对象以查看它是否为空等)而且,即使我可以在构造函数中放置功能代码,我也不知道要在构造函数中检查什么。
我是否无法通过 InstanceContextMode.Single 路由检查我的第一个呼叫?
【问题讨论】:
-
很确定 WCF 不会实例化您的服务器实例,直到客户端实际调用您的服务(创建客户端代理还不够)。尝试调用它,看看是否调用了构造函数。
-
声明一个静态布尔变量并将其初始值设置为 false 并在构造函数中检查值是否为 false,然后仅执行第一次运行逻辑并将该变量设置为 true。这样,您只需运行该逻辑一次。
-
感谢您的回复。我确实尝试过静态变量路由,试图在构造函数中检查它。但是,即使客户端调用服务,构造函数也不会被调用。我正在上传更完整的代码图片来展示这一点。
标签: wcf design-patterns singleton