0

私は最も奇妙な問題を抱えています。

私の C# ソリューションには、デスクトップ テスト アプリケーションとサービス アプリケーションがあります。両方のアプリケーションの開始時に、まったく同じメソッドを呼び出しますが、動作はまったく異なります。私のデスクトップ アプリケーションは問題なく動作し、COM ポートを読み取り、その情報を処理してから、そのデータを DB に挿入します。サービスアプリケーションは、COMポートを正常に読み取りますが、その後、データの処理がまったく異なり、その後、間違ったデータを変換しようとしているためにSQLExceptionがスローされます(具体的には日時「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;
    
    }
    

皆さんが私を助けてくれることを願っています。

ありがとう。

4

3 に答える 3

3

コードは同じかもしれませんが、サービスはまったく異なるセキュリティ コンテキストで実行されます。これらは通常、LocalSystemユーザーの下で実行され、デスクトップにはアクセスできません。この使用では、ネットワーク アクセスも非常に制限されます。

コードをサービスとしてデバッグするか、少なくともいくつかのデバッグ ログ ステートメントを追加して、動作の違いを見つけ出す必要があります。

于 2012-09-18T21:12:31.240 に答える
0

問題は解決しました。何らかの理由で、私のサービスは、デスクトップ アプリケーションが使用しているものとは異なる CultureInfo を使用しています。

デスクトップ アプリケーションは、Regional Configuration で設定されたデフォルトの CultureInfo を使用しているようですが、サービス アプリケーションは何らかの理由で使用していません。

助けてくれてありがとう。

于 2012-09-18T22:08:32.283 に答える
0

'01/01/0001' は有効な .NET 日付ですが、有効な MS SQL 日付ではありません。

MSSQL を使用していない可能性がありますが、どのデータベースにも有効な日付範囲があります。

SQL の DateTime は、1753 年 1 月 1 日から 9999 年 12 月 31 日までです。

SmallDateTIME は、1900 年 1 月 1 日から 2079 年 6 月 6 日までです。

私は常に日付範囲を確認してから挿入します。

于 2012-09-18T21:10:57.060 に答える