0

私は小さなチャットアプリケーションを書きます。ユーザー名やパスワードなどの情報を保存するために、データをSQL-Compact3.5SP1データベースに保存します。

すべて正常に動作していますが、別の(同じマシン上の同じ.exe)クライアントがサービスにアクセスしたい場合。2番目のクライアントのServiceReference.Class.Open()からEndpointNotFound例外が発生しました。

したがって、CEデータアクセスコードを削除してもエラーは発生しません(if(false)を使用)

問題はどこだ?私はこれをグーグルで検索しましたが、私が得るのと同じエラーは誰にも見られません:(

解決

http://csharponphone.blogspot.com/2007/01/keeping-sqlceconnection-open-and-thread.htmlのラッパー を脅威の安全性のために使用しましたが、現在は機能しています:)


クライアントコード:

public test()
{
    var newCompositeType = new Client.ServiceReference1.CompositeType();
    newCompositeType.StringValue = "Hallo" + DateTime.Now.ToLongTimeString();

    newCompositeType.Save = (Console.ReadKey().Key == ConsoleKey.J);

    ServiceReference1.Service1Client sc = new Client.ServiceReference1.Service1Client();
    sc.Open(); 
    Console.WriteLine("Save " + newCompositeType.StringValue);
    sc.GetDataUsingDataContract(newCompositeType);
    sc.Close();
}

サーバーコード

public CompositeType GetDataUsingDataContract(CompositeType composite)
{
    if (composite.Save)  
    {
        SqlCeConnection con = new SqlCeConnection(Properties.Settings.Default.Con);
        con.Open();

        var com = con.CreateCommand();
        com.CommandText = "SELECT * FROM TEST";

        SqlCeResultSet result = com.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Updatable);

        var rec = result.CreateRecord();
        rec["TextField"] = composite.StringValue;
        result.Insert(rec);



        result.Close();
        result.Dispose();
        com.Dispose();
        con.Close();
        con.Dispose();  
    }    
    return composite;
}
4

3 に答える 3

0

http://csharponphone.blogspot.com/2007/01/keeping-sqlceconnection-open-and-thread.htmlのラッパーを脅威の安全性のために使用しましたが、現在は機能しています:)

于 2010-11-09T15:24:17.720 に答える
0

conオブジェクトを破棄する前に接続を閉じていません。

試す:

con.Close();
con.Dispose();
于 2010-01-15T13:25:14.720 に答える
0

2 番目のクライアントが接続するときに、サービスの初期化中に例外が発生する可能性があります。2 番目の exe の実行と同時にサービスをデバッグし、

VS で例外動作を設定して、共通言語ランタイム例外がスローされたときと、例外が処理されずにエラーが表示されたときに中断するようにします。

tomlog の回答にあるように、接続を適切に閉じていないことが原因である可能性があります。

于 2010-01-15T13:27:08.460 に答える