2016-07-07 8 views
0

Webソケットの静的リストを使用するとき、異なる呼び出しのために時々静的フィールドの値が異なります。AzureのASP.NETのWebソケットの静的リストの別のインスタンス

それがどのように動作するかを

  • 私は、Webソケット(WebSocketHandler.ashx)を使用して、いくつかのHTMLページを開くと、ページから送信されたメッセージはすべてのページに来ます。
  • APIを呼び出すと、「Hello from API」というメッセージもすべてのページに表示されます。それは実際に(アズールに)どのように動作する

  • 時にはそれが
  • 正常に動作します。しかし、時には最初のページからのメッセージが最初のものだけに、2ページ目から来ているだけに来ます私はAPIを呼び出すとき - 変数isWebSocketInit = false(これは_webSockets = nullを意味する)

私は静的変数を使用してWebソケットを保存できないのですか?それでは、ソケットのリストをどこに保存するのですか?または、静的フィールドが常に同じ値を持っていることをどうすればできますか?

WebSocketHandler.ashx:

private static List<WebSocket> _webSockets; 

public void ProcessRequest(HttpContext context) 
{ 
    if (context.IsWebSocketRequest) 
    context.AcceptWebSocketRequest(WebSocketRequest); 
} 

private async Task WebSocketRequest(AspNetWebSocketContext context) 
{ 
    var webSocket = context.WebSocket; 
    _webSockets = new List<WebSocket>(); 
    _webSockets.Add(webSocket); // simplified by removing EnterWriteLock, ExitWriteLock 
    try 
    { 
    while (true) 
    { 
     var arraySegment = new ArraySegment<byte>(new byte[1024]); 
     var result = await _webSocket.ReceiveAsync(arraySegment, CancellationToken.None); 
     SendToAll(result); 
    } 
    } 
    catch { _webSockets.Remove(webSocket); } 
} 

public static bool SendToAll(ArraySegment<byte> arraySegment) 
{ 
    if (_webSockets == null) 
    return false; 
    foreach (var webSocket in _webSockets.ToList()) // simplified 
    try 
    { 
     if (webSocket.State == WebSocketState.Open) 
     webSocket.SendAsync(arraySegment, WebSocketMessageType.Text, true, CancellationToken.None).Wait(); 
    } 
    catch { _webSockets.Remove(webSocket); } // simplified 
    return true; 
} 

public static bool SendToAll(string text) 
{ 
    return Send(new ArraySegment<byte>(Encoding.UTF8.GetBytes(text))); 
} 

APIHandler.ashx:

var isWebSocketInit = WebSocketHandler.SendToAll("Hello from API"); 

答えて

0

私はAzureのポータルのスケーリング設定で2 Instancesを選択したことに気づきました。

1 Instanceを選択すると問題が解決しました。 →<My site>Scale

manage.windowsazure.comWeb apps

1 InstanceInstance Count
関連する問題