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

本文关键字:服务器 程序 挂起 客户端 连接 | 更新日期: 2023-09-27 18:13:13

问候!

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

登录url

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服务更新数据/将数据写入服务器数据库。在admin登录中将调用相同的登录url调用和其他post和get方法。

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

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

可能是什么问题,我该如何解决这个服务器问题。这是sqlitedb的读写问题吗。请帮我提一些有价值的建议。

问候Sangeetha

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

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