2013-05-15 73 views
4

我有一個C#應用程序作爲一個Windows服務運行。此應用程序使用開放源代碼微型http服務器進行URL通信。開發了一個使用get/post方法通過c#應用程序更新和選擇來自sqlite數據庫的數據的應用程序。重新啓動一個URL調用的C#窗口服務

我有一個名爲https:/ domainname:portnumber /文件夾/樹/ 200 它從數據庫讀取數據藉助於c#服務,並以xml格式向客戶端返回大量數據。

有些時候,這個URL被調用totral c#windows服務正在重新啓動。 然後需要刷新flext應用程序以再次啓動它。 關閉安裝了Windows服務的服務器防火牆,並且還可以訪問機器。

當我檢查日誌後,我發現這個URL調用後,服務器重新啓動。此外,當我檢查了交通提琴手我得到以下錯誤:

HTTP/1.1 502 Fiddler - Connection Failed 
Content-Type: text/html; charset=UTF-8 
Connection: close 
Timestamp: 10:18:52.685 

[Fiddler] The socket connection to (domainname) failed. <br />ErrorCode: 10061. 

用於調用該文件夾中的代碼/樹低於

public string Tree() 
{ 
    try 
    { 
     string langstr = ""; 
     if (Request.QueryString["lang"] != null && !string.IsNullOrEmpty(Request.QueryString["lang"].Value)) 
     { 
      langstr = Request.QueryString["lang"].Value.ToString(); 
     } 
     else 
     { 
      ThingzDatabase db = SessionDatabase; 
      langstr = db.DefaultLanguage; 
      db = null; 
     } 

     folderTree = new FolderTree(Convert.ToInt32(Id), true, SessionDatabase, langstr); 
     XmlDocument doc = folderTree.XML; 

     Response.ContentType = ContentType.Xml; 
     langstr = null; 
     folderTree.db2 = null; 
     folderTree = null; 
     //GC.Collect(); 
     return doc.InnerXml;      
    } 
    catch (Exception e) 
    { 
     TouchServer.Log(Logger.MessageType.Error, 1, e.ToString()); 
     return "Get folder tree failed, reason:" + e.Message; 
    } 
} 

執行從SQLite數據庫下面的代碼查詢被使用

public SQLiteDataReader ExecuteSQL(String sqlExpr) 
{ 
    if (conn.State != ConnectionState.Open 
     Open(DataFile); 

    using (SQLiteCommand cmd = conn.CreateCommand()) 
    { 
     cmd.CommandText = sqlExpr + ";PRAGMA read_uncommitted = 1;"; 
     cmd.CommandType = CommandType.Text; 
     return cmd.ExecuteReader(); 
    }   
} 
+0

你的問題是什麼?防止您的Windows服務重新啓動,或者您嘗試重新啓動Windows服務? – terry

回答

0

在那個服務中,這是通過http發送大量文本;當寫入響應時,在方法的開始處添加response.BufferOutput = false;,並在每次寫入後調用Flush

注意:我不確定這是否適用於您的嵌入式http服務器。但這適用於IIS。

0

它看起來好像你的SQL代碼沒有捕獲異常......至少不是立即在方法內。這意味着如果拋出異常,服務會因未處理的異常而崩潰。嘗試連接AppDomain.UnhandledException事件並將任何捕獲到的異常打印到文件,日誌源等。這將允許您確定SQL異常(讀超時等)是否導致崩潰。