public async Task <IHttpActionResult> ConnectAndInvoke([FromBody] HubNamesAndHubMethodInvocations hubNamesAndHubMethodInvocations) { Session session; try { session = await PerformConnect(hubNamesAndHubMethodInvocations.HubNames); } catch (ArgumentOutOfRangeException) { return(NotFound()); } return(Ok(new { ConnectionId = session.ConnectionId, ReturnValues = await ExecuteMultipleHubMethodInvocations(hubNamesAndHubMethodInvocations.HubMethodInvocations, session, Request) })); }
public async Task <IHttpActionResult> ReconnectAndInvoke(string connectionId, [FromBody] HubNamesAndHubMethodInvocations hubNamesAndHubMethodInvocations) { Session session; bool sessionRetrieved; sessionManagementLock.EnterReadLock(); try { sessionRetrieved = sessions.TryGetValue(connectionId, out session); } finally { sessionManagementLock.ExitReadLock(); } if (!sessionRetrieved) { try { session = await PerformConnect(hubNamesAndHubMethodInvocations.HubNames, connectionId); } catch (ArgumentOutOfRangeException) { return(NotFound()); } return(Ok(new { ConnectionId = session.ConnectionId, ReturnValues = await ExecuteMultipleHubMethodInvocations(hubNamesAndHubMethodInvocations.HubMethodInvocations, session, Request) })); } if (!session.Hubs.Keys.OrderBy(n => n).SequenceEqual(hubNamesAndHubMethodInvocations.HubNames.OrderBy(n => n), StringComparer.OrdinalIgnoreCase)) { return(Conflict()); } return(Ok(new { Events = GetEvents(session), ReturnValues = await ExecuteMultipleHubMethodInvocations(hubNamesAndHubMethodInvocations.HubMethodInvocations, session, Request) })); }