“WCF服务”的数据库连接问题?
发布出去的WCF服务,有一个执行存储过程向数据库中写数据的方法。用“DBHelp”类:
public class DBaseHelper
{
private string connectiostring = System.Configuration.ConfigurationManager.AppSettings["MyConnString"].ToString();
private SqlConnection connection = null;
public SqlConnection Connection
{
get
{
if (connection == null)
{
connection = new SqlConnection(connectiostring);
connection.Open();
}
else if (connection.State == ConnectionState.Closed)
{
connection.Open();
}
else if (connection.State == ConnectionState.Broken)
{
connection.Close();
connection.Dispose();
connection.Open();
}
return connection;
}
}
public int ExecuteNonQuery(string strSql, params SqlParameter[] paramter)
{
SqlCommand cmd = new SqlCommand(strSql, Connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddRange(paramter);
int count = Convert.ToInt32(cmd.ExecuteNonQuery());
connection.Close();
//connection.Dispose();
return count;
}
}
问题:
运行存储过程,
if (new DAL.DBaseHelper().ExecuteNonQuery("Usp_AddCollectDatas", parameters) > 0)
return true;
else
return false;
因为服务是被持续调用的,一秒钟被调用“50”次,也就是一秒钟写入50条数据。这样反复的“打开连接”、“关闭连接”,一秒钟开关50次岂不是非常浪费资源,增大资源开销。
问题一: 有别的方法,让连接一直开着吗??? 比如说“10分钟”内没有数据写入了那么就关掉。
问题二:WCF服务是可以并发的对吧,多个客户端可以同时写入数据。但是,它们用的对数据库的“Session”是不一样的吧??? --------------------编程问答-------------------- Web上访问完必须要关闭,但是这种状况吗? 关闭不等于销毁。 --------------------编程问答-------------------- vs有连接池,如果你的连接字符串完全一样的话,它不会创建新连接的,会取出已经存在的连接使用,如果连接字符串变化了,哪怕是个空格,连接池中也找不到,就要重新创建一个 --------------------编程问答-------------------- 请Google Ado.net连接池。
connection close后并不是真的关闭,而是放回连接池。下次在new一个connection,会从连接池里找,条件是connectionstring完全一致。这个应该完全解决了你你的问题一。 --------------------编程问答-------------------- 你可以把wcf接收到的数据先放在队列中缓存起来,再自己可以控制的多线程的插入数据库 --------------------编程问答-------------------- 二楼和三楼的很强大,学习了! --------------------编程问答--------------------
所以说现在是可以的了,对吧??? --------------------编程问答-------------------- 大师,您怎么看???
补充:.NET技术 , C#