4

Webサービス内の静的変数は、サーバー上のWebサービスのすべての実行呼び出し間で共有されていますか?私の場合はASP.NET Webサービスの静的フィールド

は、私は、サーバー全体の同期ロックをしたい、と私は、単一の

private static Object syncHandle = new Object(); 

とそれを達成することができます信じていることは正しいですか?

答えて

2

はい、それらはすべてAppDomainごとに共有されています。なぜなら、一般的には使用しない理由です。

これらは、通常、正しく使用される可能性が低いため、使用しないでください。また、HttpContext.CacheやSessionのようなより安全な選択肢があるためです。

これらの静的メンバーへのすべてのアクセスをカプセル化し、正しくロックを処理すると、ボトルネックになる可能性のある安全な実装が得られます。それがないと本当に良いです。

また、ASMX Webサービスを意味するように見えますが、ASMXまたはWCFを指定する必要があります。

+0

なぜ使用しないのですか?静的オブジェクトは、特に共有データをキャッシュする目的で、Webアプリケーションで非常に優れた用途を持っています。 – Kibbee

+0

アプリケーションキャッシュで共有データをキャッシュする場合 – JoshBerke

1

同じプロセスで実行されている限り、それらは共有されていると思います。したがって、同じサーバーから要求している2人のユーザーが同じオブジェクトのインスタンスを持つことになります。しかし、IIS上で異なるアプリケーションを異なるコンピュータ上で実行することができます。この場合、オブジェクトへのインスタンスは共有されないことは間違いありません。

1

ウェブガーデンを持たない限り、それらはすべて共有されています。ウェブガーデンは、単一のアプリケーションを扱う複数のホストプロセスです。この場合、各ホストは独自の静的データを持ちます。

関連する問題