【发布时间】:2013-07-26 21:15:38
【问题描述】:
我正在创建一个客户端可以与之通信的 WCF 服务(将在 IIS 中运行)。我希望我的服务器定期向主服务器发送心跳。
目前我看到的唯一方法是创建第二个 Windows 服务来发送心跳。
有什么方法可以让我原来的 WCF 服务定期运行一个事件,这样我就可以只用一个服务完成所有事情?
【问题讨论】:
标签: c# wcf iis windows-services
我正在创建一个客户端可以与之通信的 WCF 服务(将在 IIS 中运行)。我希望我的服务器定期向主服务器发送心跳。
目前我看到的唯一方法是创建第二个 Windows 服务来发送心跳。
有什么方法可以让我原来的 WCF 服务定期运行一个事件,这样我就可以只用一个服务完成所有事情?
【问题讨论】:
标签: c# wcf iis windows-services
在 WCF 服务中并不是一个好方法
如果该服务需要使用,您可以存储 NextHeartBeat 时间戳,并检查每个请求是否该向主服务器发送消息。
【讨论】:
您想做的事情可以通过server push 或full-duplex 方法来实现。但是对于心跳,您可能会使用 WebClient 进行简单的 http ping,如 here 所述。自托管(非 IIS)时,您可以覆盖 ServiceBase.OnStart/OnStop 并启动/停止计时器以定期触发 ping。
但是,在 IIS 中托管 WCF 服务通常意味着您的服务是基于每个请求进行实例化的,因此没有服务实例挂起以发送持久 ping。
这取决于您需要到主服务器的心跳的目的。您能否改为让主服务器定期向 WCF 服务发出请求?
如果您确实需要长期运行的服务,那么将 WCF 托管在 Windows 服务中而不是 IIS 可能是一种选择。
【讨论】: