2012-09-18 113 views
0

我有最奇怪的问题。桌面应用程序和服务应用程序之间的不同行为

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

我需要这个应用程序是一个服务,我有桌面应用程序只是为了测试它。我一直在研究服务一段时间,之前我从来没有见过这种行为。

应用程序和服务工作如此不同以致使用EXACT相同的库调用相同的函数的可能性如何?

下面是代码:

  • 服务:

    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; 
    
    } 
    

我希望你们能帮助我。

谢谢。

+1

这意味着'处理数据是完全不同的'。你不是说代码是一样的吗?你能标记你注意到第一个区别的代码吗? –

+0

您向我们展示的代码并不真正相关。在您的方法中的某处,正在对作为服务运行时无效的权限或上下文进行假设。你将不得不附加到服务,并逐步了解发生了什么。您也可以尝试在您的用户帐户下运行该服务作为故障排除步骤,以查看它是否正常工作。 –

回答

3

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

您需要将代码作为服务进行调试,或者至少添加一些调试日志记录语句以试图找出哪些行为有所不同。

+0

我认为问题可能是区域配置。我的桌面应用程序工作正常,而且我的服务不是。我的服务可能与我的桌面应用程序在不同的区域配置下工作吗? – NicoRiff

+0

是的。只需使用默认格式记录当前日期和时间,您就会看到不同之处。 – zmbq

+0

+1你引导他回答,而不是评论,并给你他自己发布答案的检查。 – Paparazzi

0

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

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

日期时间为1753年1月1日,经过12月31日,9999

SMALLDATETIME是1900年1月1日,到2079年6月6

我经常检查日期范围之前,并插入。

+0

是的,我明白,我用那个日期时间的例子来解释发生了什么。这是我的数据没有得到正确处理的后果。我的桌面应用没有thar错误。 – NicoRiff

+0

然后隔离数据值出错并且发布那行代码。你为什么试图向数据库提交无效数据? – Paparazzi

0

问题已解决。出于某种原因,我的服务使用的是与我的桌面应用程序不同的CultureInfo。

似乎桌面应用程序使用缺省的CultureInfo,它在区域配置和服务应用程序上设置,出于某种原因,不会。

谢谢你的帮助。

相关问题