.NET 4下的偶发Windows服务失败,然后在重新启动尝试时阻塞端口

Chr*_*s B 6 .net

大约每天一次,我在关键任务交易服务中收到以下错误.

来源:.NET运行时,类型:错误,应用程序:Application.exe,框架版本:v4.0.30319,说明:由于.NET运行时在IP 000006447F281DBD(000006447F100000)处出现内部错误而导致进程终止,退出代码为80131506.

在收到此错误并尝试重新启动应用程序后,似乎我们绑定的套接字尚未从先前(失败)执行中清除,因为我们System.ServiceModel.AddressAlreadyInUseException在启动时尝试绑定套接字时收到了.

我有两个问题.

  1. 我们需要了解为什么会出现第一个错误,您是否有错误代码中的任何信息等.
  2. 我们需要一种能够在错误发生后成功绑定的方法.有关如何在下次启动时清理端口的任何建议.

应用程序运行的环境是

  • Microsoft Windows Server 2003 R2
  • 标准x64版
  • Service Pack 2
  • 2x 4Core Intel CPU X5365 @ 3.00GHz
  • 16.0 GB的RAM.

Han*_*ant 4

这是早期 .NET 中的 ExecutionEngineException。您无法在 .NET 4.0 中捕获它,AppDomain.UnhandledException 将不会运行。

此异常的一般诊断是垃圾收集堆的完整性受到损害。典型的触发器是写入超过缓冲区末尾的非托管代码。或者它可能是环境因素,病毒扫描程序有能力导致此问题。尤其是赛门铁克的安全产品。鉴于您的服务终止时端口不会自动关闭,这在您的情况下有点可能。从技术上讲,CLR 中的错​​误也可能导致此问题。

因此我建议:

  • 检查您的源代码库并彻底检查所使用的任何非托管代码。
  • 联系第 3 方组件的供应商并询问已知的堆损坏问题。
  • 检查运行此代码的计算机的配置。尽可能禁用附加组件,暂时禁用运行服务并非严格必需的任何内容
  • 将您的项目重新定位到 .NET 3.5 SP1 框架。