0

私は、AzureワーカーロールによってホストされているOWIN APIファームを持っています。この役割へのリクエストは適切にラウンドロビンされていないようです。WebRequestクライアントがWebファーム内の特定のサーバーに固執しないようにする方法を教えてください。

具体的には、要求がロール内のインスタンスに「スティック」してラウンドロビンされていないような、C#ベースのエージェントがかなりあります。私はこれがこれらのエージェントのクライアント側の問題だと思っています。私のエージェントは私の労働者の役割を毎分2回呼びますから、これは大きな問題です。

私のワーカーロール(これはGETメソッドです。同様のPOSTメソッドがあります)を呼び出すコードは次のとおりです。特定のインスタンスへの接続が固執しないようにするためにできることはありますか?

var client = WebRequest.Create(url); 
client.Headers.Add("Authorization", string.Format("Bearer {0}", token.AccessToken)); 
client.Headers.Add("AccountId", accountId.ToString()); 
client.Timeout = 120000; 
client.Method = "GET"; 

using (var response = client.GetResponse()) 
{ 
    using (var stream = response.GetResponseStream()) 
    { 
     if (stream == null) return default(T); 

     using (var reader = new StreamReader(stream)) 
     { 
      var data = reader.ReadToEnd(); 
      return JsonConvert.DeserializeObject<T>(data); 
     } 
    } 
} 

答えて

0

あなたの負荷分散モードをチェックする:べたつきが5タプルに相当する2つのタプル(ソース、DEST)、3タプル(ソース、DEST、ポート)、またはnone /なし粘着性に構成することができます(送信元IP、送信元ポート、宛先IP、宛先ポート、プロトコルタイプ)。デフォルトは、none/5タプルです。あなたが設定は、ここに.csdefファイルで変更/確認することができますCloudServiceについては

は一例です。ここで

<Endpoints> 
<InputEndpoint name="input-endpoint-name" loadBalancerProbe="load-balancer-probe-name" loadBalancerDistribution="sourceIP" protocol="[http|https|tcp|udp]" localPort="local-port-number" port="port-number" certificate="certificate-name" /> 
</Endpoints> 

は完全な情報です:https://azure.microsoft.com/en-us/documentation/articles/load-balancer-distribution-mode/

+0

私は= を使用しています"HttpsEndpoint" protocol = "https" port = "443" certificate = "SSL" localPort = "443" /> – Igorek

0

AzureのWebサイトは、アプリケーション要求と呼ばれる機能を持っていますそのウェブサイトインスタンスの識別情報をコードするクッキーをクライアントに提供することによって、クライアントとウェブサイトのインスタンスとの間でセッションを固定するルーティング(ARR)アフィニティ。その後のクライアントからのすべての要求は、元のWebサイトインスタンスに導かれます。

ARRは時に便利ですが、クライアントが特定のWebサイトのインスタンスに接続するため、システムのスケーラビリティが制限され、「ステートフルネス」が導入される可能性があります。これは、クライアントが最初に接続したインスタンスが失敗した場合に特に問題になります。

編曲・無効化 - セッションアフィニティカスタムヘッダを送信するためにweb.configファイルを変更することで、ウェブサイトのためのARRを無効にすることが可能である:

<system.webServer> 
    <httpProtocol> 
    <customHeaders> 
     <add name="Arr-Disable-Session-Affinity" value="True" /> 
    </customHeaders> 
    </httpProtocol> 
</system.webServer> 
+0

Webサイトは使用していませんが、ワーカーロールを使用 – Igorek

+0

私はWebロールでこれを試しませんでした。 WebロールはIISを使用しますが、とにかく試してみて、web.configファイルを変更することができます。それがうまくいくなら、私は驚かないだろう。私に知らせてください、私は見つけることが好奇心です。 –

+0

ええ、私が言及したようにWebロールを実行していない場合、Web ApiはOWINベースであり、Worker ROle内のIISの外で実行されます – Igorek

関連する問題