SQL Compact只允许一个WCF客户端

时间:2010-01-15 13:18:13

标签: c# sql-server-ce data-access

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

3 个答案:

答案 0 :(得分:0)

在处置con对象之前,您没有关闭连接。

尝试:

con.Close();
con.Dispose();

答案 1 :(得分:0)

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

的同时调试服务

在VS中设置异常行为,以便在抛出公共语言运行时异常时以及在未处理的情况下中断并且您将看到错误。

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

答案 2 :(得分:0)

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