木子屋 Dnawo's BLOG

解决了一次数据库连接失败后主题生成服务无法再正常使用的错误

👤 dnawo 📅 2008-12-01 👁 5817 👍 0 💬 0 🔄 本站原创
主题生成服务结构大致如下:

protected void Done(object sender, EventArgs e)
{
	if (status2rd)
	{
		status2rd = false;//不能进行新的批次

		try
		{
			//读取记录
			//生成主题
			//更新记录中的生成状态
		}
		catch (Exception ex)
		{
			//更新记录中的错误报告

			status2rd = true;
		}

		status2rd = true;
	}
}

出现症状是:当数据库连接失败一次后,即使后来数据库已经恢复正常可以成功连接也无法再生成主题。数据库连接失败错误信息:

14:06:03: 在从服务器接收结果时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 指定的网络名不再可用。)

经分析,数据库连接失败后,在"//更新记录中的错误报告"处直接更新数据库导致了新的错误发生(catch块内有新错误发生),因而status2rd的值始终为false,也就无法再继续主题生成,解决方法是更新错误报告时判断下上边的记录是否成功读取(即数据库是否成功连接)。

所以,一定要严格检查catch块内语句,保证这边不再发生错误,否则,程序调试、找出错误原因会有很多困难!

=========================================

2009-08-18:最近一段时间,老出现某个版本的主题生成失败后,之后该版本的其他主题便都无法再打包了,重启服务没用,卸载重新安装才行!日志如下:

17:23:39: 批次出错(3rd)。10009,3333
17:23:39: System.Exception: 打包失败:processing d:\sispackgetest\temp\symbina\v3_bt\633862130195937500\633862130195937500.pkg...
d:\sispackgetest\temp\symbina\v3_bt\633862130195937500\633862130195937500.pkg(18) : error: different uid.

在 ThemeMakerLib.MakesisHelper.SymbianS60V3(String pkgfile, String sisfile)
在 ThemeMakerLib.Symbian.S60.V3.Maker.Package(String sourcefile, String destfile, Boolean includeMM)
在 ThemeOnline.ThemeOnline3rd.Done(Object sender, EventArgs e) 位置 E:\ThemeOnline\ThemeOnline\ThemeOnline3rd.cs:行号 138

调试了很久,才发现又是catch块中出错导致的,Windows服务要将错误信息写入数据库,错误信息字数太多,字段长度太小导致:

17:30:30: 批次出错(3rd)。10009,3333
17:30:30: System.Exception: 打包失败:processing d:\sispackgetest\temp\symbina\v3_bt\633862134302812500\633862134302812500.pkg...
d:\sispackgetest\temp\symbina\v3_bt\633862134302812500\633862134302812500.pkg(18) : error: different uid.

在 ThemeMakerLib.MakesisHelper.SymbianS60V3(String pkgfile, String sisfile)
在 ThemeMakerLib.Symbian.S60.V3.Maker.Package(String sourcefile, String destfile, Boolean includeMM)
在 ThemeOnline.ThemeOnline3rd.Done(Object sender, EventArgs e) 位置 E:\ThemeOnline\ThemeOnline\ThemeOnline3rd.cs:行号 138
17:30:30: System.Data.SqlClient.SqlException: 将截断字符串或二进制数据。
语句已终止。
在 ThemeOnline.DAL.Theme_Online.UpdateNewInfo(Theme_OnlineInfo themeOnlineInfo) 位置 E:\ThemeOnline\ThemeOnline\DAL\Theme_Online.cs:行号 101
在 ThemeOnline.BLL.Theme_Online.UpdateNewInfo(Theme_OnlineInfo themeOnlineInfo) 位置 E:\ThemeOnline\ThemeOnline\BLL\Theme_Online.cs:行号 41
在 ThemeOnline.ThemeOnline3rd.Done(Object sender, EventArgs e) 位置 E:\ThemeOnline\ThemeOnline\ThemeOnline3rd.cs:行号 197

评论(0)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 DedeCms标签代码参考 下一篇 → .NET在屏幕上输出文字