我有一个WCF服务,我在IIS 7.5和Windows 2008的AppFabric上托管。服务设置为按照建议自动启动。 当服务启动时,它进入一个永不停止的while循环,请记住这是所需的行为。 while循环应该处理一些我不知道它何时可用的数据。有没有办法确定IIS或网站已被停止?
问题是当我关闭网站或IIS时,服务仍在运行。所以我的问题是:
有没有办法确定IIS或网站已被停止?
有没有更好的方式来实现这种永无止境的行为?
希望这里有足够的信息。
我有一个WCF服务,我在IIS 7.5和Windows 2008的AppFabric上托管。服务设置为按照建议自动启动。 当服务启动时,它进入一个永不停止的while循环,请记住这是所需的行为。 while循环应该处理一些我不知道它何时可用的数据。有没有办法确定IIS或网站已被停止?
问题是当我关闭网站或IIS时,服务仍在运行。所以我的问题是:
有没有办法确定IIS或网站已被停止?
有没有更好的方式来实现这种永无止境的行为?
希望这里有足够的信息。
好的,所以你有一个无限的轮询循环运行。这种设计很有意义,尽管它很不寻常。
我建议您启动一个单独的线程进行轮询。您的线程代码应该如下所示:
void ThreadProc() {
try {
while(true) { ... }
}
catch (ThreadAbortException) {
//AppDomain shutdown
}
}
当关闭所有线程时将被中止。这是检测关机的技巧。
启动线程这样的:
new Thread(ThreadProc) { IsBackground = true }
与本网站状态检测方面的问题:如果你知道网站的名称,你可以使用Microsoft.Web.Administration API来确定,如果该网站已经开始或没有。一些很好的例子可在Learn IIS website
不过,我第二关心别人在这里,为什么您使用的是无限循环......
正如我已经表明我愿意提供建议,但原因是我正在进行轮询以了解何时处理数据。该服务实际上联系了我不拥有的其他服务,所以我不知道它何时被使用。 – Oakcool 2012-02-22 17:35:14
我明白了。所以有人打电话给你的服务,并在响应联系,其他服务,更正?如果是这样,为什么你需要无限等待一些东西?使用WCF的整个观点似乎在请求到达时处理Web请求和处理数据......我错过了什么?无论如何,您应该能够使用上面的Microsoft.Web.Administration API检测网站是否启动。 – 2012-02-23 04:15:06
该服务的行为像一个Windows服务,它应该是一样的确切的东西,而不是我使用WCF的“APPFABRIC”的Windows服务。所以不,没有人叫它,它应该是自给自足的,随时都在运行,轮询数据等待正确的信息被发现,然后发生一些处理。 – Oakcool 2012-02-23 04:44:18
是什么while循环呢?你为什么需要有一个?这些信息将对答案有帮助。 – usr 2012-02-22 00:07:49
也许Windows服务中的主机? – 2012-02-22 00:08:54
随着usr的问题:你为什么要一个服务永远循环?看起来......错了。 – NotMe 2012-02-22 00:09:33