2013-05-10 105 views
0

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

我有一个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:\域名:端口\项目\详细\ 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服务将数据更新/写入服务器数据库。 相同的登录网址调用和其他post和get方法将在管理员登录中调用。

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

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

可能是什么问题,我该如何解决这个服务器的问题。这是一个读取或写入问题的SQLite数据库。 请帮助我提出宝贵的建议。

问候 桑杰塔

+0

您可能需要添加一些跟踪和/或记录到服务器应用程序。这应该会提供更多关于错误发生的信息。 – 2013-05-10 16:13:10

+1

问题几乎肯定与您的锁定代码有关;如果您不小心将锁定区域最小化并正确释放它们,则很容易导致服务器死锁。 – EricLaw 2013-05-10 16:38:30

+0

@Sangeetha。当你说服务器挂起时,你的意思是说windows服务已经停止,或者它仍在运行但是没有响应? – 2013-05-11 21:08:15

回答

0

的解决方案是从DB CRUD操作分开ASP.NET Web角色/隶属函数:后者要么实现自己的自主安全模式,或使用从角色/成员输入类。

+0

该项目没有包含asp.net应用程序。后端是用于处理http请求和数据库的c#。前端是flex应用程序。 – Sangeetha 2013-05-10 16:03:10

+0

好的,C#代码所在的位置在哪里? – 2013-05-10 16:05:00

+0

c#控制台应用程序,并作为Windows服务安装在生产机器中。 – Sangeetha 2013-05-10 16:30:42