我们最近将一个网站转换为 Web 应用程序。当我们部署时,一切都运行良好。如果我们允许应用程序关闭(即 1 小时内没有人使用它),那么当我们返回它时,登录页面加载正常,但随后对 Web 服务(旧 SOAP 服务)的调用失败。这不会在开发环境中重现,仅在我们的服务器上。
在我们追踪一些问题的地方,似乎一个或多个字符串在使用之前没有被初始化,导致空字符串或空字符串导致事情崩溃。
真正让我们痛苦的一件事是Log4Net 日志记录完全停止;所以追踪问题需要大量的杂乱代码。
关于根本原因的任何想法(并希望得到修复)
========更新=========
其中一个问题可以追溯到一个有趣的情况……</p>
失败的服务调用产生“它必须至少指定客户端属性”。这是由这个设置的
profile.Client = ApplicationName;
public static string ApplicationName
{
get
{
return string.Format(CLIENTNAME, Resources.AppVersion.Version);
}
}
哪个电话:
internal static string Version
{
get
{
return ResourceManager.GetString("Version", resourceCulture);
}
}
从概念上讲,如果它工作一次,它就永远不会失败。
另一个问题是当 Web 应用程序重新加载时 Log4net 无法正常工作,我们也遇到了静态问题
private static readonly ILog ExceptionLog = LogManager.GetLogger("ExceptionLogger");
private static readonly ILog SoaLog = LogManager.GetLogger("soaPerfLogger");
private static readonly ILog InfoLog = LogManager.GetLogger("InfoLogger");
private static readonly ILog DebugLog = LogManager.GetLogger("DebugLogger");
明显的原因似乎是在 Web 应用程序重新启动时静态变量无效。它们没有被重新初始化。
等待精彩的建议!否则,我将通过代码中的所有 852 静态用法来添加代码来解决这种异常行为。