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

主题生成服务结构大致如下:

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


上一篇: DedeCms标签代码参考
下一篇: .NET在屏幕上输出文字
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
最新日志:
评论: 0 | 引用: 0 | 查看次数: 5165
发表评论
登录后再发表评论!