我在VS2010中创建了一个WCF服务库,可以通过从项目的右键菜单中选择Debug-> Start New Instance来运行该服务。
我可以进一步定义一些在服务启动之前执行的初始化逻辑吗?
编辑:
我尝试实现的是初始化NHibernate和其他几个元素,以便在服务启动时它们就绪。
答案 0 :(得分:7)
如果您是自托管(即自己编写WCF主机) - 确保没问题,请在.Open()
上致电ServiceHost
之前执行您需要做的任何事情。
ServiceHost host = new ServiceHost(typeof(YourServiceClass));
// do your initialization here
........
host.Open();
如果您使用IIS或WAS或AppFabric来托管您的WCF服务:我对此表示怀疑,因为这些是“基于消息的”激活服务器,例如:当请求进来时,他们启动服务主机以按需处理请求,如果您使用常规ServiceHost
类进行托管,我不知道有任何扩展点进入初始化过程
那说:您当然可以定义自己的ServiceHost
后代 - 从ServiceHost
或ServiceHostBase
派生您的自定义服务主机 - 这些应该为您提供进入初始化过程的要点(覆盖InitializeRuntime
方法或回复Opening
事件)。
请参阅MSDN文档:
ServiceHostBase
的具体实现,可能继承自