【问题标题】:C# server program hangs when multi clients connects多客户端连接时 C# 服务器程序挂起
【发布时间】:2013-05-10 15:46:49
【问题描述】:

您好!

我有一个 c# 控制台应用程序,它作为 Windows 服务安装在 live 机器上。此应用程序充当服务器并使用 http 和 https 服务。为了与客户端 URLS 的微型 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;

                             --------

item/detail url,例如 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 方法将在管理员登录中调用。

服务器使用的数据库是sqlite。现在让我解释我的问题, 我收到客户的投诉,说服务器被挂起,管理员无法登录。或者,如果在对数据库执行任何更新后登录无法上传任何图像,则服务器会挂起。所以需要重新启动windows服务。

当管理员对服务器数据库执行 CRUD 操作时。同时客户端应用程序(flex)应用程序也尝试从服务器获取数据。此 url 每 5 分钟从客户端应用程序调用一次。

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

问候 桑吉萨

【问题讨论】:

  • 您可能需要向服务器应用程序添加一些跟踪和/或日志记录。这应该为您提供有关错误发生位置的更多信息。
  • 这个问题几乎肯定和你的锁码有关;如果不小心将锁定区域最小化并正确释放,很容易导致服务器死锁。
  • @Sangeetha。当您说服务器挂起时,您的意思是windows服务已经停止,还是它仍在运行但没有响应?
  • 是的,windows服务已经停止

标签: c# sqlite http https


【解决方案1】:

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

【讨论】:

  • 此项目中不包含 asp.net 应用程序。后端是用于处理 http 请求和数据库的 c#。前端是弹性应用程序。
  • c# 一个控制台应用程序并作为 Windows 服务安装在生产机器中。
猜你喜欢
  • 2019-03-17
  • 2018-10-19
  • 2012-05-22
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 2023-04-09
相关资源
最近更新 更多