最近、Web サイトを Web アプリケーションに変換しました。展開すると、すべてが完全に機能します。アプリケーションのシャットダウンを許可した場合 (つまり、誰もアプリケーションを 1 時間使用しない場合)、アプリケーションに戻ると、ログイン ページは正常にロードされますが、Web サービス (古い SOAP サービス) への呼び出しは失敗します。これは、開発環境では再現されず、サーバー上でのみ再現されます。
いくつかの問題を突き止めたところ、1 つまたは複数の文字列が使用前に初期化されていなかったため、空または null 文字列が発生して事態が悪化したようです。
私たちを本当に悩ませていることの 1 つは、Log4Net のログ記録が完全に停止することです。そのため、問題を追跡するには、かなりのクラッジコードが必要です。
根本的な原因 (そしてできれば修正) のアイデア
========更新=========
問題の 1 つが興味深い状況に突き止められました…</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);
}
}
概念的には、一度機能したら失敗することはありません。
もう 1 つの問題は、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 アプリケーションの再起動時に null になる静的変数のようです。それらは再初期化されていません。
ステキな提案お待ちしております!それ以外の場合は、コード内の 852 の静的使用法をすべて調べて、この異常な動作に対処するコードを追加することになります。