我有一个c#应用程序,它作为Windows服务运行。此应用程序使用开源微型http服务器进行URL通信。开发了一个flext应用程序,用于使用get / post方法通过c#应用程序更新和选择sqlite数据库中的数据。
我有一个名为https:/ domainname:portnumber / folder / tree / 200的网址 它在c#服务的帮助下从数据库中读取数据,并以xml格式向客户端返回大量数据。
有些时候这个网址被称为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 :(得分:1)
返回字符串的大小是多少?您可以将其写入文件以验证返回字符串的长度。
如果长度超过一定限制,Web服务可能会出现问题。
以下链接讨论了类似的问题。 http://social.msdn.microsoft.com/forums/en-US/wcf/thread/58e420e9-43a3-4119-b541-d18158038e36/
如果您没有处理异常,服务可能会崩溃。
答案 1 :(得分:0)
在该服务中,即通过http发送大量文本;写入响应时,在方法开头添加response.BufferOutput = false;
,并在每次写入后调用Flush
。
注意:我不确定这是否适用于您的嵌入式http服务器。但这适用于IIS。
答案 2 :(得分:0)
看起来您的SQL代码没有捕获异常......至少不会立即在方法中。按理说,如果抛出异常,服务将因未处理的异常而崩溃。尝试挂钩AppDomain.UnhandledException
事件并将任何捕获的异常打印到文件,日志源等。这将允许您确定SQL异常(读取超时等)是否导致崩溃。