2017-06-01 67 views
0

我试图获得通过用户名用户的情况下,我的代码工作的OnConnected方法内,但在OnDisconnected我越来越Object reference is not set to an instance of an object这是我的代码:获取对象引用未设置到对象内SignalR OnDisconnected

在这里工作:

public override async Task OnConnected() 
{ 
    var id = Context.ConnectionId; 
    var userName = Context.User.Identity.Name; 
    var connectedUser = new ChatUserModel(); 

    var existingUserResponse = await _client.GetAsync("chats/users/" + userName + "/"); 
    if (existingUserResponse.IsSuccessStatusCode) 
    { 
     var existingUserResult = existingUserResponse.Content.ReadAsStringAsync().Result; 

     var existingUser = JsonConvert.DeserializeObject<ChatUserModel>(existingUserResult); 
      existingUser.connectionId = id; 
     connectedUser = await AddOrUpdateUser(existingUser); 
    } 

    var response = await _client.GetAsync("chats/users"); 
    var result = response.Content.ReadAsStringAsync().Result; 
    var users = JsonConvert.DeserializeObject<List<ChatUserModel>>(result); 

    Clients.Client(id).userConnected(users); 
} 

不能在这里:

public override async Task OnDisconnected(bool stopCalled) 
{ 
    var userName = Context.User.Identity.Name; 

    try 
    { 
     var response = await _client.GetAsync("chats/users/" + userName + "/"); 
    } 
    catch (Exception ex) 
    { 
     string msg = ex.Message; 
    } 
    //var existingUserResult = existingUserResponse.Content.ReadAsStringAsync().Result; 
    //var existingUser = JsonConvert.DeserializeObject<ChatUserModel>(existingUserResult); 
    //existingUser.connectionId = ""; 

    //var connectedUser = await AddOrUpdateUser(existingUser); 
} 

回答

0

OnDisconnect方法是从服务器调用不是来自CLIE nt,因为该用户为空。

为了处理这种情况下,你应与用户connectionIds和保存的地方,并在OnDisconnect您可以通过的ConnectionId

public override async Task OnConnected() 
{ 
    var id = Context.ConnectionId; 
    var userName = Context.User.Identity.Name; 
    SaveUserToDb(id,userName);// 
    // other codes 
} 

public override async Task OnDisconnected(bool stopCalled) 
{ 
    var id = Context.ConnectionId; 
    var userName = GetUserNameFromDB(id); 

    // and now you have your username 
} 
+0

到达用户,您可以举个例子? –

+0

我编辑了答案。 –

+0

你有没有试过? –