桌面应用和服务应用之间的不同行为

时间:2012-09-18 21:04:39

标签: c# .net service desktop-application

我遇到了最棘手的问题。

在我的C#解决方案中,我有一个桌面测试应用程序和一个服务应用程序。在两个应用程序的开始,我调用完全相同的方法,并且行为完全不同。 我的桌面应用程序工作正常,读取COM端口,处理该信息,然后将数据插入我的数据库。 服务应用程序,读取COM端口很好,但随后数据的处理完全不同,之后它抛出一个SQLException,因为它试图转换错误的数据(Specifficaly a datetime '01 / 01/0001')

我需要这个应用程序是一个服务,我有桌面应用程序只是为了测试它。我一直致力于服务,我以前从未见过这种行为。

如何使用完全相同的库调用相同的函数,应用程序和服务如何工作?

以下是代码:

  • 服务:

    protected override void OnStart()
    {
                    csGPS.startGPSData();
    
        Thread hiloEscuchar = new Thread(delegate()
            {
                csListener listener = new csListener();
                listener.listenAutoCommand();
            });
        hiloEscuchar.Start();
    
    
        Thread hiloEnviar = new Thread(delegate()
            {
                csSender.buscarComandos();
            });
        hiloEnviar.Start();
    
    
        Thread hiloEnviarPosiciones = new Thread(delegate()
        {
            csSender.enviarPosiciones();
        });
        hiloEnviarPosiciones.Start();
    }
    
  • 桌面应用:

    private void btnComenzar_Click(object sender, EventArgs e)
    {
        csGPS.startGPSData();
    
        Thread hiloEscuchar = new Thread(delegate()
            {
                csListener listener = new csListener();
                listener.listenAutoCommand();
            });
        hiloEscuchar.Start();
    
    
        Thread hiloEnviar = new Thread(delegate()
            {
                csSender.buscarComandos();
            });
        hiloEnviar.Start();
    
    
        Thread hiloEnviarPosiciones = new Thread(delegate()
        {
            csSender.enviarPosiciones();
        });
        hiloEnviarPosiciones.Start();
    
        lblEstado.Text = "STARTED";
        btnComenzar.Enabled = false;
    
    }
    

我希望你们能帮帮我。

感谢。

2 个答案:

答案 0 :(得分:3)

虽然代码可能相同,但服务在完全不同的安全上下文下运行。它们通常在LocalSystem用户下运行,无法访问桌面。此用途的网络访问也非常有限。

您需要将代码作为服务进行调试,或者至少添加一些调试日志语句来尝试找出不同的行为。

答案 1 :(得分:0)

'01 / 01/0001'是有效的.NET日期,但它不是有效的MS SQL日期。

您可能没有使用MSSQL,但任何数据库都有有效的日期范围。

SQL上的DateTime是1753年1月1日到9999年12月31日

SmallDateTIme是1900年1月1日,直到2079年6月6日

我总是检查之前的日期范围并插入。