在URL调用时重启C# Windows服务

4
我有一个C#应用程序,作为Windows服务运行。该应用程序使用开源的小型http服务器进行URL通信。通过C#应用程序使用get/post方法开发了flext应用程序,以更新和从sqlite数据库中选择数据。
我有一个名为https:/domainname:portnumber/folder/tree/200的URL,它借助C#服务从数据库中读取数据,并将大量XML格式的数据返回给客户端。
有时当调用此URL时,整个C# Windows服务会重新启动。然后需要刷新flext应用程序才能再次启动。安装Windows服务的服务器防火墙已关闭,机器也可以访问。
当我检查日志时,我发现在调用此URL后,服务器重新启动。另外,当我在Fiddler中检查流量时,我得到以下错误:
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();
    }          
}

你遇到了什么问题?是为了防止你的Windows服务重新启动,还是你尝试重新启动Windows服务? - terry
3个回答

1

0
在发送大量文本通过http的服务中,当写入响应时,在方法开头添加response.BufferOutput = false;并在每次写入后调用Flush
注意:我不确定这是否适用于您的嵌入式http服务器。但是这适用于IIS。

0

看起来你的SQL代码没有捕获异常...至少在方法内部没有立即处理。如果抛出异常,由于未处理的异常,服务将崩溃是很有道理的。尝试钩入AppDomain.UnhandledException事件,并将任何捕获的异常打印到文件、日志源等中。这将使你能够确定是否由于SQL异常(如读取超时等)导致了崩溃。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接