我写了一个小聊天应用程序。为了保存一些信息,比如用户名和密码,我将数据存储在 SQL-Compact 3.5 SP1 数据库中。
一切正常,但如果另一个(同一台机器上的相同 .exe)客户端想要访问该服务。它来自第二个客户端的 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;
}