2011-09-14 31 views
1

HttpWebRequestを使用した認証で問題を解決しようとしています。IIS認証。匿名認証とWindows認証の両方を使用すると、余分なヘッダーが発生する

したがって、ロードバランスされているSOAの解決策があります。ソリューションの一部は、すべての要求を認証する必要があることです(Windows認証を使用)。このソリューションのもう1つの部分は、ロードバランサがキープアライブページへの匿名アクセスを持つ必要があることです。だから我々は

<location path="hello.aspx" allowOverride="false"> 
    <system.web> 
    <authorization> 
     <allow users="?" /> 
    </authorization> 
    </system.web> 
</location> 
<system.web> 
    <authentication mode="Windows" /> 
    <authorization> 
    <deny users="?" /> 
    </authorization> 
    ... 
</system.web> 

以下のようにappropraite web.configファイルのセクションをやった私たちはので、ここで問題です

httpRequest.UseDefaultCredentials = true; 
httpRequest.CachePolicy = new RequestCachePolicy(RequestCacheLevel.Default); 

次のように正しくセットアップのHttpRequestをしました。統合された認証だけが有効になっていると、すべてがうまくいく。しかし、匿名と統合認証の両方が有効になっているとき、私たちは余分なヘッダこれは、私たちのクライアントが嘔吐する原因になっている

Cache-Control: private 

戻ってくるを取得する(web.configファイルには、上記で定義されて)。 CachePolicyをNoCacheNoStoreに設定することはできますが、それは理想的ではありません。なぜなら、他のリクエストをキャッシュすることができ、キャッシュする必要があるからです。 clientCache DisableCacheを設定しても効果はありません。

すべてのアイデアをいただければ幸いです。

答えて

0

は解決策を見つけたことはありませんが、とにかく、興味を持っていることあなたのそれらのためにここでこの問題を回避するには、

public Foo ExecuteRequest(RequestCachePolicy cachePolicy, ...) 
{ 
    return ExecuteRequest(new RequestCachePolicy(RequestCacheLevel.Default), ...); 
} 

private Foo ExecuteRequest(RequestCachePolicy cachePolicy, ...) 
{ 
    ... 
    try 
    { 
     ... 
     // Make call using HttpWebRequest 
     ... 
    } 
    catch (WebException ex) 
    { 
     var webResponse = ex.Response as HttpWebResponse; 
     if ((ex.Status == WebExceptionStatus.ProtocolError) && 
      (null != webResponse) && 
      (webResponse.StatusCode == HttpStatusCode.Unauthorized) && 
      (cachePolicy.Level != RequestCacheLevel.NoCacheNoStore)) 
     { 
      return ExecuteRequest(new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore), ...); 
     } 
     ... 
    } 
    ... 
} 
です
関連する問題