示例#1
0
        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);
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
 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);
 }
示例#7
0
        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);
        }