1

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 サービスにファイルを保存すると、サービスが再コンパイルされるため、データを取得するために別のルックアップが実行されます。

4

1 に答える 1

0

LINQ-to-SQL がキャッシュを実行している可能性があることを確認するためだけに、Web サービスを経由せずに LINQ-to-SQL 呼び出しを直接テストできますか?

また、これはあなたの問題に似た問題へのリンクであり、オブジェクト追跡を無効にする必要があります。データ コンテキストでのこのプロパティの既定値は ですtrue。投稿の関連セクション:

あなたの解決策は、データ コンテキストのオブジェクト トラッキング (LINQ のキャッシュ) を無効にすることです。 myContext.ObjectTrackingEnabled = false;

お役に立てれば!

于 2010-07-30T16:56:42.933 に答える