2

WCF サービスを介してエンティティ オブジェクトを公開しています。エンティティを取得するために、WCF を介していくつかの要求を行います。100 近くまたはそれ以上です。最近、ダイジェスト認証に切り替えたところ、すべてのサーバー リクエストが 401 を発行していることに気付きました。これにより、サーバーに 2 倍の負荷がかかり、非常に大きな「投稿」があるため、追加のトラフィック ラグが発生します。目標は、サーバーからの Challenge(401) を 1 つだけ持つことであり、サーバーが 401 を発行しないように、残りの要求に Auth ヘッダーを含める必要があります。 401 を完全に排除することはできませんが、少なくともすべてのリクエストでそれらを回避します。サーバーとクライアントの両方を制御するため、すべてのリクエストに含まれる Digest Auth ヘッダーを送信します。.NET 2.0 webservices Style Web Reference Proxy/Client (SOAPHttpClientProtocol を継承する) には Pre-Authenticate プロパティがあり、Auth ヘッダーを要求に含めることができますが、WCF Services Web Reference クライアント (ChannelFactory を使用する) には存在しません。だ。このプロパティが設定されている場合と設定されていない場合では、要求/応答トラフィックに明確な違いがあります。これはダイジェスト認証 (基本ではない) であるため、ClientMessageInspector を使用して BeginRequest 中に手動で Auth ヘッダーを追加することはできません。このプロパティが設定されている場合と設定されていない場合では、要求/応答トラフィックに明確な違いがあります。これはダイジェスト認証 (基本ではない) であるため、ClientMessageInspector を使用して BeginRequest 中に手動で Auth ヘッダーを追加することはできません。このプロパティが設定されている場合と設定されていない場合では、要求/応答トラフィックに明確な違いがあります。これはダイジェスト認証 (基本ではない) であるため、ClientMessageInspector を使用して BeginRequest 中に手動で Auth ヘッダーを追加することはできません。

    NetworkCredential creds = new NetworkCredential("username", "pass", "domain");

    //using .NET 2.0 "Web Reference" Style client that uses inherits SoapHttpClientProtocol:
    webReferenceClient = new Service1();
    webReferenceClient.Credentials = creds;
    //**Pre Authenticate **
    webReferenceClient.PreAuthenticate = true;
    string resp1 = "";
    for (int i = 0; i < 3;i++) 
        resp1 = resp1 + webReferenceClient.SayHello("jack");

    //using WCF "Service Reference" Client that uses ChannelFactory
    serviceReferenceClient = new Service1Client();

    serviceReferenceClient.ClientCredentials.HttpDigest.ClientCredential = creds;
    serviceReferenceClient.ClientCredentials.HttpDigest.AllowedImpersonationLevel =          TokenImpersonationLevel.Impersonation;

    string resp="";
    for (var i = 0; i < 3;i++) 
        resp = resp + serviceReferenceClient.SayHello("jack");

Preauthenticate が設定された .NET 2.0 Style Web Reference Client を使用した Fiddler トレース。401 は 1 つだけで、残りのリクエストには Auth ヘッダーがあることに注意してください。

.net2.0 スタイルの Web 参照による事前認証

WCF スタイル サービス参照クライアントでトレースします。リクエストごとに、サーバーから 401 が生成されました。

すべてのリクエストを認証する

2 つのオプションが表示されます。

  1. クライアント コードを .NET 2.0 スタイルの Web 参照クライアントを使用するように切り替えます。カスタムの障害処理を行っているため、これは大きな動きとなります。
  2. WCF ChannelFactory の WebRequest または HTTPRequest オブジェクトにアクセスし、PreAuthenticate プロパティを設定する方法を見つけます。実際の WebRequest オブジェクトにアクセスするには??

他のオプションはありますか??

4

0 に答える 0