4

我有作为 Windows 服务运行的 ac# 应用程序。此应用程序使用开源微型 http 服务器进行 URL 通信。开发了一个 flext 应用程序,通过 c# 应用程序使用 get/post 方法从 sqlite 数据库中更新和选择数据。

我有一个名为 https:/domainname:portnumber/folder/tree/200 的 url,它在 ac# 服务的帮助下从数据库中读取数据,并以 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();
    }          
}
4

3 回答 3

1

返回字符串的大小是多少?您可以将其写入文件以验证返回字符串的长度。

如果长度超过一定的限制,Web 服务可能会出现问题。

以下链接讨论了类似的问题。 http://social.msdn.microsoft.com/forums/en-US/wcf/thread/58e420e9-43a3-4119-b541-d18158038e36/

如果您没有处理异常,服务可能会崩溃。

于 2013-05-22T06:54:57.013 回答
0

在该服务中,通过 http 发送大量文本;当写入响应response.BufferOutput = false;时,在方法的开头添加并Flush在每次写入后调用。

注意:我不确定这是否适用于您的嵌入式 http 服务器。但这适用于 IIS。

于 2013-05-28T13:24:16.853 回答
0

看起来好像您的 SQL 代码没有捕获异常......至少不是立即在方法中。按理说,如果抛出异常,服务会因为未处理的异常而崩溃。尝试挂钩AppDomain.UnhandledException事件并将任何捕获的异常打印到文件、日志源等。这将允许您确定 SQL 异常(读取超时等)是否导致崩溃。

于 2013-05-28T15:14:57.483 回答