1

名前付きパイプを開き、クライアントが送信するデータを収集する C# サーバーを作成しています。基本的に、.NET MySql Connector と MySqlConnection クラスを使用して、収集した情報を mysql データベースに保存しています。また、フォールバック ルールも追加しました。これは、DB にアクセスできない場合に、クライアントから送信された情報を SQL ファイルにバッファリングし、再び利用可能になったときに DB にインポートするものです。DB が完全になくなった場合 (たとえば、DB を実行するサーバーがクラッシュしたためにネットワーク上にない場合) を除いて、すべて正常に動作し、Connect() メソッドは例外をスローするのに永遠に時間がかかります。クライアントは大量のデータを送信するため、これは受け入れられません。これを修正する方法はありますか?テーブルがないなどの理由でクエリが失敗した場合は、すぐにエラーが返されます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net;
using MySql.Data.MySqlClient;

namespace PipeServer
{
    class MySqlConnector
    {
        //register logger
        private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        public delegate void MessageReceivedHandler(string message);
        public event MessageReceivedHandler MessageReceived;

        private string host;
        private string database;
        private string user;
        private string password;
        private MySqlConnection connection;
        private List<string> rows = new List<string>();



        public MySqlConnector()
        {
            this.host = Settings.Default.db_host;
            this.database = Settings.Default.db_schema;
            this.user = Settings.Default.db_user;
            this.password = Settings.Default.db_pw;
            string myConnectionString = "SERVER=" + this.host + ";" +
                        "DATABASE=" + this.database + ";" +
                        "UID=" + this.user + ";" +
                        "PASSWORD=" + this.password + ";";

            connection = new MySqlConnection(myConnectionString);




        }

        public bool Connect()
        {
            if (connection.State != System.Data.ConnectionState.Open)
            {
                try
                {
                    connection.Open();
                    this.MessageReceived("Connected to Database");
                    return true;
                }
                catch (MySqlException ex)
                {
                    log.Error("failed to connect! mysql error: " + ex);
                    this.MessageReceived("No Database connection - Error: "+ex);
                    return false;
                }

            }
            else
            {
                this.MessageReceived("Connected to Database");
                return true;
            }

        }
        .
        .
        .
    }
}

どんなヒントでも大歓迎です!よろしくお願いします!

4

1 に答える 1

3

永遠って言うのは30代とか?

おそらく、ConnectionString に TimeOut 設定を追加しようとしているでしょう。

http://www.connectionstrings.com/mysql

于 2012-05-03T15:29:02.820 に答える