2017-07-02 12 views
2

Webサービスを使用しているApp Serviceのトラブルシューティングを進めています。 サービスプランBasicで実行しており、350のWebソケットが可能です。 これは、WebSocketを使用する唯一の計画です。Azureのアクティブな接続でwebsocketの制限を解決しました

問題は、20時間後に私は503の応答を得て、自分のwebsocketの限界に達したということです。

セットアップには、3つのクライアントがサービスに接続しています。

私のアプリでウェブソケットのリークを調べる過程で、使用しているウェブソケットの数を追跡したいと思います。

私のアプリやAzureポータルでは、どこにアクティブなWebソケット接続の数が表示されていますか?

フォローアップ:

私はAmor suggestedとしてのWebSocket接続をログに記録しました。 私のアプリのHTTP部分はまだ動作していますが、私はアプリケーションから動的な結果を得ることができます。これは現在どのwebsocket接続がアクティブで、何回起動してから作成されたのかを報告します。

アプリサービスを再起動し、1人のクライアントが無期限に再接続するように設定した後。

「ウェブソケットの接続総数」が350に達するまでうまくいきました。この時点でクライアントをシャットダウンしました。

制限は350同時接続である必要がありますが、開始から合計350個のようです。 これらの接続のほとんど(少なくとも340個)は、新しい接続を開始する前に各接続を配置した単一のクライアントによって開始されました。制限に達するとシャットダウンされました。

標準には人為的な制限がないため、私はBasicからStandardへのアップグレードを提案されています。私がこの作業を見ることができる唯一の理由は、基本計画のwebsocket制限にバグがある場合です。

アップデート2

は、並行して、私は、Microsoftの開発者サポートに接触してきたし、彼らはソケットがケストレルしていないのに対し、IISで立ち往生していることであることをを思われるもの気づきました。この原因はまだ調査中です。

サポートには、時間の経過とともにどのように限界に達したかを明確に示す接続使用状況のグラフが表示される可能性があります。

私のコードに何らかのエラーがあった場合に備えて、この質問を更新します。

答えて

1

接続を数える変数を定義することをお勧めします。 Webソケット接続が開かれている場合は、接続数を増やすだけです。 Webソケット接続が閉じている場合は、接続数を減らしてください。下記のコードは参照用です。

ASP.NET SignalRの接続をカウントします。

public class MyHub : Hub 
{ 
    private int _connectionCount = 0; 

    public override Task OnConnected() 
    { 
     _connectionCount++; 
     return base.OnConnected(); 
    } 

    public override Task OnReconnected() 
    { 
     _connectionCount++; 
     return base.OnReconnected(); 
    } 

    public override Task OnDisconnected(bool stopCalled) 
    { 
     _connectionCount--; 
     return base.OnDisconnected(stopCalled); 
    } 
} 

は、従来のASP.NETでの接続をカウントします。

public class WSChatController : ApiController 
{ 
    private int _connectionCount = 0; 

    public HttpResponseMessage Get() 
    { 
     if (HttpContext.Current.IsWebSocketRequest) 
     { 
      HttpContext.Current.AcceptWebSocketRequest(ProcessWSChat); 
     } 
     return new HttpResponseMessage(HttpStatusCode.SwitchingProtocols); 
    } 

    private async Task ProcessWSChat(AspNetWebSocketContext context) 
    { 
     WebSocket socket = context.WebSocket; 
     while (true) 
     { 
      ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]); 
      WebSocketReceiveResult result = await socket.ReceiveAsync(
       buffer, CancellationToken.None); 
      if (socket.State == WebSocketState.Open) 
      { 
       _connectionCount++; 
       //Process the request 
      } 
      else 
      { 
       _connectionCount--; 
       break; 
      } 
     } 
    } 
} 
+0

新しいWebSocketごとに増加する第2のカウンタを追加しました。 結果は、WebSocketの合計接続数(同時ではありません)が350になります。 – hultqvist

+0

接続を正しく閉じているかどうかを確認してください。下記のリンクは参考になります。 [.NETで双方向WebSocketを正常に閉じる方法](https://stackoverflow.com/questions/28330705/how-to-gracefully-close-a-two-way-websocket-in-net) – Amor

関連する問題