【发布时间】:2010-01-12 03:03:30
【问题描述】:
我偶然发现了无法启动超过一定数量的 .Net Windows 服务的情况。我们的软件系统是一组 8-9 个 Windows 服务,我想在一台机器上创建 5 个逻辑环境(即大约 40 个服务)。为了重现问题并证明它不是应用程序问题,我创建了一个简单的 Windows 服务。
我将其编译为 TestService.exe,然后创建 30 个副本。从 TestService01.exe 到 TestService30.exe。 我正在使用 SC 安装服务,如下所示
SC create "Test Service Copy 01" start= demand binpath= "C:\Temp\TestService\TestService01.exe" obj= "mydomain\myservices" password= "myservicepwd" displayname= "Test Service Copy 01"
现在我可以在 Windows Server 2003 机器上启动 15 到 25 个这些服务。之后我无法启动其他服务。它失败并显示错误消息框
TestService18.exe - Application Error
---------------------------
The exception unknown software exception (0xc06d007e) occurred in the application at location 0x7c812afb.
---------------------------
OK Cancel
---------------------------
可能导致此错误的原因。您可以在 Windows 服务器上运行的 .Net 服务的数量是否有上限?
我已经在 ServerFault 上问过这个问题。链接是here
代码:
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.ServiceProcess;
using System.Threading;
namespace TestService
{
public class MyService : ServiceBase
{
private Timer stateTimer;
private readonly TimerCallback timerDelegate = WriteToLog;
static readonly string fileName = @"C:\temp\Testservice\Log\" + new Random().Next() + ".txt";
public MyService()
{
ServiceName = "Test Service";
CanStop = true;
CanPauseAndContinue = false;
AutoLog = true;
}
protected override void OnStart(string[] args)
{
using (StreamWriter writer = new StreamWriter(fileName, true))
{
writer.WriteLine("Starting ...");
writer.WriteLine(Assembly.GetExecutingAssembly().Location);
}
stateTimer = new Timer(timerDelegate, null, 1000, 1000);
}
protected override void OnStop()
{
stateTimer.Dispose();
}
static void WriteToLog(object stateObject)
{
using (StreamWriter writer = new StreamWriter(fileName, true))
{
writer.WriteLine(DateTime.Now.Ticks);
}
}
public static void Main()
{
Run(new MyService());
}
}
}
【问题讨论】:
标签: .net windows-services