0

今日遭遇した問題があり、誰かが答えてくれることを願っています。何かが足りないのかもしれませんが、今は目の前にコードがないので、記憶からこれを覚えています。

UI レイヤーとサービス レイヤー (WCF サービス) の 2 つのレイヤーを持つ .NET MVC Web アプリケーションがあります。UI レイヤーには、WCF サービスへのサービス参照があります。

UI レイヤーは、一部のデータを global.asax ファイルの Application_Start の静的変数にキャッシュします。これらの静的変数は、参照される共有クラス ライブラリ内のクラス内にあります。

私の WCF レイヤーは、このクラス ライブラリと前述の静的変数も参照しています。

これらのレイヤーは両方とも別々のサーバーにインストールされているため、独自の IIS インスタンスの下にあります。

私の WCF サービスが、UI レイヤーによって設定された静的変数のデータにアクセスできる方法はありますか? サービス層には参照されたアセンブリの独自のインスタンスがあるため、その中の変数はそれ自体にのみ属していると思いましたか?

私が尋ねる理由はこれです。以前はサービス レイヤーに global.asax ファイルがありましたが、これも最近削除したもので、共有ライブラリに静的変数を設定するために使用されていました。

このglobal.asaxファイルをサービスレイヤーから完全に削除しても、UIレイヤーによって入力されたデータにアクセスできました(少なくともそうだったと思います)。アプリケーションは、サービス層のこれらの変数が非アクティブのまま (私が思うに) NULL になり、null 参照例外を取得していたときに、一定期間機能し続けます。

変数を再度設定する唯一の方法は、UI レイヤー アプリケーション プールを再起動することでした。その後、アプリケーションはしばらくの間再び機能し、繰り返されました。

私が説明していることが可能かどうかわからない場合、何かが欠けているか、誰かがなぜこれが起こっているのか知っていますか?

4

1 に答える 1

1

静的変数は、AppDomain 内でのみ静的です。IIS がアプリケーション プールをシャットダウンすると (非アクティブなどにより)、これらの静的な値は失われます。

WCF プロジェクトで静的変数を参照し、WCF レイヤーがそれらの静的値を取得するために使用するサービスを追加します。

于 2012-10-17T21:52:46.217 に答える