我有一个由Windows服务托管的WCF服务。当客户端连接到WCF服务时,我无法弄清楚如何通知Windows服务。基本上我在Windows服务中启动WCF服务的是:
private ServiceHost sHost;
WCF.WCFService wcfService = new WCF.WCFService();
sHost = new ServiceHost(wcfService);
sHost.Open();
我可以使用wcfService对象使用Windows服务调用WCF服务中的方法。有什么方法可以在客户端连接到WCF服务时触发某种事件吗?
答案 0 :(得分:1)
该服务作为对象运行,该对象根据ServiceBehaviourAttribute
属性InstanceContextMode
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class MyService : IMyService
{
// ...
InstanceContextMode的值为
Single
- 为所有会话和呼叫运行单个服务实例PerSession
- 为每个会话(即每个客户端)运行服务实例PerCall
- 即使从单个客户端,也会为每次调用实例化服务实例默认值为PerSession
,这对大多数情况都有意义。假设您正在使用PerSession
,您可以在服务的构造函数中放置您喜欢的任何“连接逻辑”。
// you don't need to specify PerSession as it is default, but I have for clarity
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class MyService : IMyService
{
public MyService()
{
// constructor will be called for each new client session
// eg fire an Event, log a new client has connected, etc
}
// ...
}
您需要小心在构造函数中运行代码,因为在构造函数完成之前,该服务将不可用。如果您想做任何可能需要时间的事情,请发起一个事件或发送一个线程来执行该工作。
答案 1 :(得分:1)
我在这里找到了最好的答案:Subscribe to events within a WCF service
怀疑您可以在WCF服务中创建一个可由主机拾取的事件处理程序。