2012-09-18 142 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,它在區域配置和服務應用程序上設置,出於某種原因,不會。

謝謝你的幫助。

相關問題