0

我写了一个小聊天应用程序。为了保存一些信息,比如用户名和密码,我将数据存储在 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;
}
4

3 回答 3

0

con在处置对象之前,您不会关闭连接。

尝试:

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

当第二个客户端连接时,可能是在服务初始化期间发生的异常。在运行第二个exe的同时调试服务,

将 VS 中的异常行为设置为在引发公共语言运行时异常以及未处理它们时中断,您将看到错误。

正如 tomlog 的回答所述 - 这可能是因为您没有正确关闭连接。

于 2010-01-15T13:27:08.460 回答
0

我在http://csharponphone.blogspot.com/2007/01/keeping-sqlceconnection-open-and-thread.html中使用了包装器来保证安全,现在它可以工作了:)

于 2010-11-09T15:24:17.720 回答