0

私の問題はこれです、そして私が誰かを悩ませる前に、これは私の最初の投稿ですので、私が誤りを犯した場合、私を許してください。

.txtファイルが貼り付けられた場合にコンソールアプリケーションをトリガーするファイルシステムウォッチャーを使用して、単純なWindowsサービスを作成しました。サービスはローカルシステムとして実行されており、完全に機能します。ただし、監視するファイルはリモートユーザーによって毎朝保存され、コンソールアプリケーションは原因なく失敗します。ファイルを保存すると、サービスとコンソールアプリケーションは想定どおりの動作をします。

コンソールアプリケーションは、GeneticParsing Libraryを使用してファイルをテーブルに読み込み、リモートサーバー上のoracle 11g dbに一括ロードしてから、ファイルをアーカイブします。コンソールアプリケーションのメインコードは以下のとおりです...どんな助けでも大歓迎です!

static void Main(string[] args)
    {
        try
        {
            FileInfo f = new FileInfo(args[0].ToString());

            Thread.Sleep(15000);

            GenericParserAdapter p = new GenericParserAdapter();
            p.ColumnDelimiter = '|';
            p.SetDataSource(f.FullName);
            DataTable d = new DataTable();
            d = p.GetDataTable();
            bb_usage_methods b = new bb_usage_methods(false);
            DataTable d_merge = new DataTable();
            d_merge.Columns.Add("BB_USAGE_ID", Type.GetType("System.Int32"));
            d_merge.Columns.Add("USAGE_DATE", Type.GetType("System.DateTime"));
            d_merge.Columns.Add("PARTY_CODE", Type.GetType("System.Int32"));
            d_merge.Columns.Add("UPLOAD_USAGE", Type.GetType("System.Decimal"));
            d_merge.Columns.Add("DOWNLOAD_USAGE", Type.GetType("System.Decimal"));
            d_merge.Columns.Add("TOTAL_USAGE", Type.GetType("System.Decimal"));

            DataRow r;
            object j = b.get_data_from_datareader("SELECT MAX(BB_USAGE_ID) FROM USAGE");
            Int32 max_id = j.ToString() == "Entry is NULL" || j.GetType() == System.Type.GetType("System.Exception") ? max_id = 1 : max_id = Convert.ToInt32(j) + 1;

            for (int i = 0; i < d.Rows.Count; i++)
            {
                r = d.Rows[i];
                try
                {
                    object[] o = { max_id, Convert.ToDateTime(r[0]), Convert.ToDecimal(r[1]), Convert.ToDecimal(r[2]), Convert.ToDecimal(r[3]), Convert.ToDecimal(r[4]) };
                    d_merge.Rows.Add(o);
                    max_id++;
                }
                catch { }
                r = null;
            }
            decimal original_count = Math.Round((decimal)(d.Rows.Count * 100) / d_merge.Rows.Count, 2);
            b.bulk_insert_into_oracle(d_merge, "USAGE");                
            DateTime dt = f.LastWriteTime;

            try
            {
                File.Move(f.FullName, f.FullName.Replace(f.Name, @"\..\Archive\" + f.Name));

            }
            catch (Exception e)
            {
               // code to log error to db
            }
        }

        catch (Exception ex)
        {
            // code to log error to db
        }
    }
}

public class log_methods : x.oracle_data_access
{
    public log_methods()
    {
       base.get_dataset("SELECT * FROM APP_LOG", "LOG_ID");
    }
}

public class bb_usage_methods : x.oracle_data_access
{
    public bb_usage_methods(Boolean get_dataset)
    {
        if (get_dataset)
        {
            base.get_dataset("SELECT * FROM USAGE", "BB_USAGE_ID");
        }
    }
}
4

1 に答える 1

0

filewatcher がそのファイルを見ていると確信していますか? リモート ユーザーがプログラムを保存すると、プログラムが起動されますか。

私の記憶が正しければ、必要なときにファイルウォッチャーがトリガーされない場合があります(リモートなどで)。

于 2013-01-25T10:24:28.227 に答える