私は小さなチャットアプリケーションを書きます。ユーザー名やパスワードなどの情報を保存するために、データを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;
}