【发布时间】:2010-01-15 13:18:13
【问题描述】:
我写了一个小聊天应用程序。为了保存一些信息,例如用户名和密码,我将数据存储在 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;
}
【问题讨论】:
-
我编写了一个具有相同功能的控制台应用程序,添加时没有错误:(我现在不知道它来自哪里...。WCF 有什么不同?
-
我使用csharponphone.blogspot.com/2007/01/… 中的包装器来保护威胁安全,现在它可以工作了
标签: c# sql-server-ce data-access