在 WCF 服务中触发 IIS AppPool 回收

Posted

技术标签:

【中文标题】在 WCF 服务中触发 IIS AppPool 回收【英文标题】:Trigger IIS AppPool recycle within a WCF service 【发布时间】:2012-06-29 10:19:53 【问题描述】:

我正在开发一个与不稳定的第三方 C++ DLL 交互的 Web 服务。

它经常抛出AccessViolationException(即DLL内的崩溃),唯一的恢复方法是回收应用程序池。

有没有办法以编程方式回收应用程序池?

注意:我尝试更改我的 .NET DLL 和 web.config 的时间戳,但这似乎不足以让 w3wp.exe 进程卸载本机 C++ DLL。我无法触摸 C++ DLL,因为它返回错误:“DLL 正在使用中”。

【问题讨论】:

【参考方案1】:

如果您可以访问该框,则可以使用 appcmd.exe :

C:\dev>\windows\system32\inetsrv\appcmd.exe apppool  /?
Administration of application pools

APPCMD (command) APPPOOL <identifier> <-parameter1:value1 ...>

Supported commands:

  list      List application pools
  set       Configure application pool
  add       Add new application pool
  delete    Delete application pool
  start     Start application pool
  stop      Stop application pool
  recycle   Recycle application pool

(To get help for each command use /?, e.g. 'appcmd.exe add site /?'.)

要在代码中使用它,您需要使用System.Diagnostics.Process 来运行适当的回收命令。

【讨论】:

以上是关于在 WCF 服务中触发 IIS AppPool 回收的主要内容,如果未能解决你的问题,请参考以下文章

在IIS托管的WCF服务中使用RabbitMQ Queue

在 IIS 中托管 WCF 服务时如何避免 CommunicationObjectFaultedException?

使用C#远程设置IIS AppPool用户的文件权限

IIS7.5 用 IIS AppPool应用程序池名 做账号 将各站点权限分开

用户 'IIS APPPOOL\ 登录失败

IIS7 中的 DefaultAppPool 和 Classic .NET AppPool 有啥区别?