1

SignalR ised および ASP.Net (VB) とチャットしようとしました。実行すると、最初のユーザーで完全に動作しますが、別のユーザーでログインするとエラーが発生します。

エラー: オーバーフロー

助けてください、私はリアルタイム アプリケーションの初心者です

Public Overrides Function OnConnected() As Task
        Dim myRoomId = "XXXX"
        Dim myUserId = IdentityUser.UserCode 
        SyncLock connections
            If Not connections.ContainsKey(myRoomId) Then
                connections(myRoomId) = New Dictionary(Of Integer, List(Of String))()
            End If
            If Not connections(myRoomId).ContainsKey(myUserId) Then ' <<<<<--- Error
                connections(myRoomId)(myUserId) = New List(Of String)()
            End If
            connections(myRoomId)(myUserId).Add(Me.Context.ConnectionId)
        End SyncLock
        Return MyBase.OnConnected()
End Function
4

1 に答える 1

0

オブジェクトの「接続」をロックし、許可されていない SyncLock 内で変更しようとしています。

空のオブジェクトを使用して SyncLock をロックします。公開および共有する必要があります。また、「OnConnect()」イベントはハブ メソッド呼び出しで毎回発生するため、使用しないでください。

このような

Private Shared _lock_connections As New Object

Public Overrides Function OnConnected() As Task
Dim myRoomId = "XXXX"
Dim myUserId = IdentityUser.UserCode
SyncLock _lock_connections
    If Not connections.ContainsKey(myRoomId) Then
        connections(myRoomId) = New Dictionary(Of Integer, List(Of String))()
    End If
    If Not connections(myRoomId).ContainsKey(myUserId) Then ' <<<<<--- Error
        connections(myRoomId)(myUserId) = New List(Of String)()
    End If
    connections(myRoomId)(myUserId).Add(Me.Context.ConnectionId)
End SyncLock
Return MyBase.OnConnected()
End Function
于 2016-06-13T22:35:25.400 に答える