我遇到了最棘手的问题。
在我的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;
}
我希望你们能帮帮我。
感谢。
答案 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日
我总是检查之前的日期范围并插入。