Windows服务在Windows 7上启动,但无法在Windows Server 2008 R2上启动

时间:2012-03-07 16:02:42

标签: c# wcf debugging windows-services windows-server

我创建了一个通过托管Windows服务部署的wcf服务。 onstart()的作用是为wcf serice创建并打开一个tcp主机。

在Windows 7中一切正常但是当我尝试在Windows Server 2008 R2中安装服务时,服务启动然后因错误而停止,有时服务会在没有任何操作时停止。它在网络服务帐户下运行。

我无法在Windows日志中找到任何有用的东西。

我已经尝试安装dubug构建并调用debugger.launch()但它无法正常工作。我不能使用remode调试,因为该进程不会保持打开足够长的时间以便我附加到它。 我真的不知道该怎么做。这是我的代码:

    protected override void OnStart(string[] args)
    {
        System.Diagnostics.Debugger.Launch();

        try
        {

            //if (!System.Diagnostics.EventLog.SourceExists("i2s CU Service (eng)"))
            //{
            //    System.Diagnostics.EventLog.CreateEventSource("i2s CU Service", "Application");
            //}
            System.Diagnostics.EventLog.CreateEventSource("i2s CU Service", "Application");
        }
        catch (Exception)
        {
            //throw;
        }
        eventLog1.Source = "i2s CU Service";
        eventLog1.Log = "Application";

        if (serviceHost != null)
        {
            serviceHost.Close();
        }

        System.Configuration.AppSettingsReader reader = new System.Configuration.AppSettingsReader();
        Uri tcpUri = null;
        try
        {
            tcpUri = new Uri((string)reader.GetValue("Uri", typeof(string))); //net.tcp://localhost:8008/i2sServer

            serviceHost = new ServiceHost(typeof(ConcurrentUsers), tcpUri);

            // Create a binding that uses TCP and set the security mode to none.
            NetTcpBinding b = new NetTcpBinding();
            b.Security.Mode = SecurityMode.None;

            // Add an endpoint to the service.
            serviceHost.AddServiceEndpoint(typeof(IConcurrentUsers), b, "");

            // Open the ServiceHostBase to create listeners and start 
            // listening for messages.
            serviceHost.Open();
        }
        catch (Exception ex)
        {
            eventLog1.WriteEntry(ex.Message, EventLogEntryType.Error);
        }


        if (serviceHost.State == CommunicationState.Opened)
        {
            eventLog1.WriteEntry("Service started.", EventLogEntryType.Information);
        }
    }

    protected override void OnStop()
    {
        if (serviceHost != null)
        {
            serviceHost.Close();
            serviceHost = null;
        }
        eventLog1.WriteEntry("Service stopped.", EventLogEntryType.Information);
    }

这个代码在Windows 7中运行得非常好,但我无法在win 2008 R2服务器上运行。

提前致谢

1 个答案:

答案 0 :(得分:0)

将您的应用程序重构为控制台应用程序,然后在所需的环境中运行它以便能够轻松调试它。

我确信一旦您在分配给Windows服务的同一用户帐户下运行控制台副本,问题就会自动显现