WCF Restful Webservice は何らかの方法で LINQ データ オブジェクトをキャッシュしているようです。
Web サービスは、.NET 4.0 でビルドされた WCF Restful Service であり、現在、ローカルの ASP.net Dev Server で実行されています。
WebサービスがLINQを使用して検証する有効なIPアドレスの範囲を含むMSSQL 2008データベースがあります。DB からの許容可能な IP 範囲に対してクライアント IP を検証するメカニズムは、独立してテストされたように正常に機能します。
シナリオ: クライアント IP は 127.0.0.1 です。有効な IP 範囲は 127.0.0.0 から 127.0.0.5 です。
Fiddler から Web サービスへの GET 要求を実行すると、Nice 200 ステータス コードが返され、正常に動作します。次に、DB の範囲を 127.0.0.0 から 127.0.0.0 に変更しても、401 ステータス コードを受信するはずなのに 200 ステータス コードを受信します。次に、Visual Studio に移動してファイルを保存し (何も変更せずに)、Fiddler に戻って要求を再発行すると、必要な 401 ステータス コードが返されます。
Web サービスでは、応答に存在する Cache-Control および Pragma ヘッダーを「no-cache」に設定しています。
HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Fri, 30 Jul 2010 16:12:56 GMT
X-AspNet-Version: 4.0.30319
Pragma: no-cache
Content-Length: 1121680
Cache-Control: no-cache
Content-Type: application/xml; charset=utf-8
Connection: Close
また..
HTTP/1.1 401 Unauthorized
Server: ASP.NET Development Server/10.0.0.0
Date: Fri, 30 Jul 2010 16:26:48 GMT
X-AspNet-Version: 4.0.30319
Pragma: no-cache
Content-Length: 88
Cache-Control: no-cache
Content-Type: application/xml; charset=utf-8
Connection: Close
LINQ プロセスの何かが、最初のリクエストから最初に取得したデータをキャッシュしており、後続の各リクエストに対して DB に返されていないように思えます。Web サービスにファイルを保存すると、サービスが再コンパイルされるため、データを取得するために別のルックアップが実行されます。