多客户端连接时,C#服务器程序挂起

时间:2013-05-10 15:46:50

标签: c# sqlite http https

问候!

我有一个c#控制台应用程序,它作为Windows服务安装在实时机器中。此应用程序充当服务器并使用http和https服务。为了与客户端URLS通信,使用Tiny HTTP服务器开源。有90个客户端使用使用flex开发的客户端程序从服务器访问数据。此flex应用程序连接到服务器,如下所示,

登录网址

try
{
   if(!Request.Uri.AbsoluteUri.Contains("https"))
        System.Threading.Monitor.Enter(Lock);
   if (Request.Method == Method.Post)
   {
      SiteSession siteSession = _login( Request.Form["SiteName"].Value.Trim(),
                                        Request.Form["UserName"].Value.Trim(),
                                        Request.Form["Password"].Value.Trim());
      if (siteSession != null)
      {
           if (siteSession.authenticated)
           {
              User currentUser = siteSession.thingzDatabase.currentUser;
              _database = siteSession.thingzDatabase;

                             --------

项目/详细信息网址,如http:\ domainname:port \ item \ detail \ temid 一个客户端调用近70个url并从服务器数据库获取数据。总共有90多个客户端

当调用项目/列表时,执行下面的代码。

if (Id == "")
{
   //System.Threading.Monitor.Enter(_locker);
   System.Threading.Monitor.Enter(Lock);
   try
   {
     if (Request.AcceptTypes == null)
     {

        TypeController.session_id = Request.QueryString["sessionid"].Value;

        //queue.   
        Enqueue(Request.QueryString["sessionid"].Value);

        //string que = "";

        ////do
        ////{
        //que = queue.Dequeue();
        //TypeController.session_id = que;

        langStr = SessionDatabase.Language;
        filter = new AllThingzFilter(SessionDatabase, parameters, langStr);

        TypeController.session_id = null;

        filter.Execute();
                                 --------

有一位管理员使用具有不同端口号的安全https服务将数据更新/写入服务器数据库。 相同的登录url调用和其他post和get方法将在admin login中调用。

服务器中使用的数据库是sqlite。现在让我解释一下我的问题, 我收到了客户的投诉,称服务器被绞死,管理员无法登录。或者,如果登录无法在执行任何数据库更新后立即上传任何图像,则服务器将挂起。因此需要重新启动Windows服务。

当admin对服务器db执行CRUD操作时。同时客户端应用程序(flex)应用程序也尝试从服务器获取数据。这个URL每隔5分钟从客户端调用一次。

可能是什么问题,我该如何解决这个服务器手。是sqlite db的读写问题吗? 请帮我提出宝贵的建议。

此致 桑杰塔

1 个答案:

答案 0 :(得分:0)

解决方案是将ASP.NET Web角色/成员函数与DB CRUD操作分开:后者应该实现自己的自治安全模型,或者使用角色/成员类的输入。