客户端 通过webservice 操作数据库
  
  查询数据库连接时,当客户端每次调用webservice, 多会新建一个数据库连接。最多的时候数据库连接达 50多个。
 
客户端运行一段时间后。导致服务器很卡,W3WP.EXE进程 占用CPU 90%+, 客户端调用刚开始调用多成功,后调用有时会
失败。连接超时/远程连接主动拒绝访问/outofmemoryexception/ 等等 请大家帮忙看下代码,应该做何修改 ,3Q
代码:    
    //客户端代码,每次操作 New 一个webService实例 
    localhost.Service server = new localhost.Service();
    server.Selectdata("select id,username,logintime,other,other1 from  Test",ref sErr);
    //webService代码
    [WebMethod]
    public DataSet Selectdata(string selectCommandText, ref string sErr)
    {
        DataSet Set = new DataSet();
        if (!SelectDs(selectCommandText, Set, ref sErr)) return null;
        return null;
    }
    public Boolean SelectDs(string selectCommandText, DataSet dbSet, ref string sErr)
    {
        sErr = "";
        try
        {
            //每次操作数据库多New 一个数据库连接  --ConnectionString 设置连接应用池 最大连接数: Max Pool Size=75
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                SqlCommand com = new SqlCommand(selectCommandText, conn);
                SqlDataAdapter dat = new SqlDataAdapter(com);
                dbSet.Clear();
                conn.Open();
                dat.Fill(dbSet);
            }
        }
        catch (SqlException sqlex)
        {
            sErr = sqlex.ToString();
            return false;
        }
        return true;
    } 

解决方案 »

  1.   

    SqlConnection conn 没有显式关闭?
    数据库挂了吧?
      

  2.   

    将相关的数据一次性获取回来以减少与服务的交互.
    如果使用的是WCF的话,可以设置其服务实例与并发访问的模式来控制客户端与服务的交互.
      

  3.   

    连接多关闭了,using (new SqlConnection(ConnectionString))恩,将相关的数据一次性获取或提交,但 这里主要是进百个 客户端可能同时 请求服务。
    现在还未用WCF
      

  4.   

    为什么客户端新一个webservice实例,请求一个数据库访问请求,服务器多会建立一个数据库连接。
    我想应该是webservice代码的问题。。
    这里webservice作为数据库访问的控制层,应该不管客户端怎么写的,数据库连接数应该只受webservice逻辑控制(所有数据库连接的开闭由webservice控制)。    求webservice应该怎么控制与配置??还有数据库连接多起来的时,IIS有时访问错误,W3WP.EXE进程CPU占大于90%+,只和数据库连接过多引起吗,还要注意什么?
      

  5.   

    注意iis中线程池的配置,要及时释放。 
      

  6.   

    我有遇到这个问题,多用户并发访问webservice,造成数据库连接数太多,其他的数据操作无法再访问。暂时还没有解决。