private async Task <SessionCreatedParameters> CreateSessionAsync(ConnectionDetails connectionDetails, string uri, CancellationToken cancellationToken) { ObjectExplorerSession session; if (!sessionMap.TryGetValue(uri, out session)) { // Establish a connection to the specified server/database session = await DoCreateSession(connectionDetails, uri); } SessionCreatedParameters response; if (session != null && !cancellationToken.IsCancellationRequested) { // Else we have a session available, response with existing session information response = new SessionCreatedParameters { Success = true, RootNode = session.Root.ToNodeInfo(), SessionId = uri, ErrorMessage = session.ErrorMessage }; await serviceHost.SendEvent(CreateSessionCompleteNotification.Type, response); return(response); } return(null); }
private void RunCreateSessionTask(ConnectionDetails connectionDetails, string uri) { Logger.Write(LogLevel.Normal, "Creating OE session"); CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); if (connectionDetails != null && !string.IsNullOrEmpty(uri)) { Task task = CreateSessionAsync(connectionDetails, uri, cancellationTokenSource.Token); CreateSessionTask = task; Task.Run(async() => { ObjectExplorerTaskResult result = await RunTaskWithTimeout(task, settings?.CreateSessionTimeout ?? ObjectExplorerSettings.DefaultCreateSessionTimeout); if (result != null && !result.IsCompleted) { cancellationTokenSource.Cancel(); SessionCreatedParameters response = new SessionCreatedParameters { Success = false, SessionId = uri, ErrorMessage = result.Exception != null ? result.Exception.Message : $"Failed to create session for session id {uri}" }; await serviceHost.SendEvent(CreateSessionCompleteNotification.Type, response); } return(result); }).ContinueWithOnFaulted(null); } }
private async Task <SessionCreatedParameters> CreateSession() { ConnectionDetails details = new ConnectionDetails() { UserName = "******", Password = "******", DatabaseName = "msdb", ServerName = "serverName" }; SessionCreatedParameters sessionResult = null; serviceHostMock.AddEventHandling(CreateSessionCompleteNotification.Type, (et, p) => sessionResult = p); CreateSessionResponse result = default(CreateSessionResponse); var contextMock = RequestContextMocks.Create <CreateSessionResponse>(r => result = r).AddErrorHandling(null); connectionServiceMock.Setup(c => c.Connect(It.IsAny <ConnectParams>())) .Returns((ConnectParams connectParams) => Task.FromResult(GetCompleteParamsForConnection(connectParams.OwnerUri, details))); ConnectionInfo connectionInfo = new ConnectionInfo(null, null, null); string fakeConnectionString = "Data Source=server;Initial Catalog=database;Integrated Security=False;User Id=user"; connectionInfo.AddConnection("Default", new SqlConnection(fakeConnectionString)); connectionServiceMock.Setup((c => c.TryFindConnection(It.IsAny <string>(), out connectionInfo))). OutCallback((string t, out ConnectionInfo v) => v = connectionInfo) .Returns(true); connectionServiceMock.Setup(c => c.Disconnect(It.IsAny <DisconnectParams>())).Returns(true); await service.HandleCreateSessionRequest(details, contextMock.Object); await service.CreateSessionTask; return(sessionResult); }
private async Task <SessionCreatedParameters> CreateSession() { SessionCreatedParameters sessionResult = null; serviceHostMock.AddEventHandling(CreateSessionCompleteNotification.Type, (et, p) => sessionResult = p); CreateSessionResponse result = default(CreateSessionResponse); var contextMock = RequestContextMocks.Create <CreateSessionResponse>(r => result = r).AddErrorHandling(null); connectionServiceMock.Setup(c => c.Connect(It.IsAny <ConnectParams>())) .Returns((ConnectParams connectParams) => Task.FromResult(GetCompleteParamsForConnection(connectParams.OwnerUri, details))); ConnectionInfo connectionInfo = new ConnectionInfo(null, null, details); connectionInfo.AddConnection("Default", new SqlConnection(fakeConnectionString)); connectionServiceMock.Setup((c => c.TryFindConnection(It.IsAny <string>(), out connectionInfo))). OutCallback((string t, out ConnectionInfo v) => v = connectionInfo) .Returns(true); connectionServiceMock.Setup(c => c.Disconnect(It.IsAny <DisconnectParams>())).Returns(true); await service.HandleCreateSessionRequest(details, contextMock.Object); await service.CreateSessionTask; return(sessionResult); }
private async Task <CloseSessionResponse> CallCloseSession(CloseSessionParams closeSessionParams, RequestContext <CloseSessionResponse> context) { SessionCreatedParameters result = null; serviceHostMock.AddEventHandling(CreateSessionCompleteNotification.Type, (et, p) => result = p); await service.HandleCloseSessionRequest(closeSessionParams, context); return(null); }
private async Task SendSessionFailedNotification(string uri, string errorMessage) { Logger.Write(LogLevel.Warning, $"Failed To create OE session: {errorMessage}"); SessionCreatedParameters result = new SessionCreatedParameters() { Success = false, ErrorMessage = errorMessage, SessionId = uri }; await serviceHost.SendEvent(CreateSessionCompleteNotification.Type, result); }
private async Task <SessionCreatedParameters> CallCreateSession(ConnectionDetails connectionDetails, RequestContext <CreateSessionResponse> context) { SessionCreatedParameters result = null; serviceHostMock.AddEventHandling(CreateSessionCompleteNotification.Type, (et, p) => result = p); await service.HandleCreateSessionRequest(connectionDetails, context); Task task = service.CreateSessionTask; if (task != null) { await task; } return(result); }