diff --git a/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminService.cs b/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminService.cs
new file mode 100644
index 00000000..13152390
--- /dev/null
+++ b/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminService.cs
@@ -0,0 +1,66 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+using Microsoft.SqlTools.Hosting.Protocol;
+using Microsoft.SqlTools.ServiceLayer.Admin.Contracts;
+using Microsoft.SqlTools.ServiceLayer.Hosting;
+using Microsoft.SqlTools.ServiceLayer.SqlContext;
+using System;
+using System.Threading.Tasks;
+
+namespace Microsoft.SqlTools.ServiceLayer.Admin
+{
+ ///
+ /// Datasource admin task service class
+ ///
+ public class AdminService
+ {
+ private static readonly Lazy instance = new Lazy(() => new AdminService());
+
+ ///
+ /// Default, parameterless constructor.
+ ///
+ internal AdminService()
+ {
+ }
+
+ ///
+ /// Gets the singleton instance object
+ ///
+ public static AdminService Instance
+ {
+ get { return instance.Value; }
+ }
+
+ ///
+ /// Initializes the service instance
+ ///
+ public void InitializeService(ServiceHost serviceHost)
+ {
+ serviceHost.SetRequestHandler(CreateDatabaseRequest.Type, HandleCreateDatabaseRequest);
+ serviceHost.SetRequestHandler(CreateLoginRequest.Type, HandleCreateLoginRequest);
+ }
+
+ ///
+ /// Handles a create database request
+ ///
+ internal static async Task HandleCreateDatabaseRequest(
+ CreateDatabaseParams databaseParams,
+ RequestContext requestContext)
+ {
+ await requestContext.SendResult(new CreateDatabaseResponse());
+ }
+
+ ///
+ /// Handles a create login request
+ ///
+ internal static async Task HandleCreateLoginRequest(
+ CreateLoginParams loginParams,
+ RequestContext requestContext)
+ {
+ await requestContext.SendResult(new CreateLoginResponse());
+ }
+ }
+}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/CreateDatabaseRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/CreateDatabaseRequest.cs
new file mode 100644
index 00000000..d223bc88
--- /dev/null
+++ b/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/CreateDatabaseRequest.cs
@@ -0,0 +1,34 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+using Microsoft.SqlTools.Hosting.Protocol.Contracts;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace Microsoft.SqlTools.ServiceLayer.Admin.Contracts
+{
+ public class CreateDatabaseParams
+ {
+ public string OwnerUri { get; set; }
+
+ public DatabaseInfo DatabaseInfo { get; set; }
+ }
+
+ public class CreateDatabaseResponse
+ {
+ public bool Result { get; set; }
+
+ public int TaskId { get; set; }
+ }
+
+ public class CreateDatabaseRequest
+ {
+ public static readonly
+ RequestType Type =
+ RequestType.Create("admin/createdatabase");
+ }
+}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/CreateLoginRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/CreateLoginRequest.cs
new file mode 100644
index 00000000..49688b85
--- /dev/null
+++ b/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/CreateLoginRequest.cs
@@ -0,0 +1,30 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+using Microsoft.SqlTools.Hosting.Protocol.Contracts;
+
+namespace Microsoft.SqlTools.ServiceLayer.Admin.Contracts
+{
+ public class CreateLoginParams
+ {
+ public string OwnerUri { get; set; }
+
+ public LoginInfo DatabaseInfo { get; set; }
+ }
+
+ public class CreateLoginResponse
+ {
+ public bool Result { get; set; }
+
+ public int TaskId { get; set; }
+ }
+
+ public class CreateLoginRequest
+ {
+ public static readonly
+ RequestType Type =
+ RequestType.Create("admin/createlogin");
+ }
+}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/DatabaseInfo.cs b/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/DatabaseInfo.cs
new file mode 100644
index 00000000..8579f8f8
--- /dev/null
+++ b/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/DatabaseInfo.cs
@@ -0,0 +1,12 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+namespace Microsoft.SqlTools.ServiceLayer.Admin.Contracts
+{
+ public class DatabaseInfo
+ {
+ public string Name { get; set; }
+ }
+}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/LoginInfo.cs b/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/LoginInfo.cs
new file mode 100644
index 00000000..6ac62d77
--- /dev/null
+++ b/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/LoginInfo.cs
@@ -0,0 +1,12 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+namespace Microsoft.SqlTools.ServiceLayer.Admin.Contracts
+{
+ public class LoginInfo
+ {
+ public string Name { get; set; }
+ }
+}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/DisasterRecovery/Contracts/BackupInfo.cs b/src/Microsoft.SqlTools.ServiceLayer/DisasterRecovery/Contracts/BackupInfo.cs
new file mode 100644
index 00000000..d54009c8
--- /dev/null
+++ b/src/Microsoft.SqlTools.ServiceLayer/DisasterRecovery/Contracts/BackupInfo.cs
@@ -0,0 +1,12 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.Contracts
+{
+ public class BackupInfo
+ {
+ public string BackupType { get; set; }
+ }
+}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/DisasterRecovery/Contracts/BackupRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/DisasterRecovery/Contracts/BackupRequest.cs
new file mode 100644
index 00000000..981bce84
--- /dev/null
+++ b/src/Microsoft.SqlTools.ServiceLayer/DisasterRecovery/Contracts/BackupRequest.cs
@@ -0,0 +1,30 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+using Microsoft.SqlTools.Hosting.Protocol.Contracts;
+
+namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.Contracts
+{
+ public class BackupParams
+ {
+ public string OwnerUri { get; set; }
+
+ public BackupInfo BackupInfo { get; set; }
+ }
+
+ public class BackupResponse
+ {
+ public bool Result { get; set; }
+
+ public int TaskId { get; set; }
+ }
+
+ public class BackupRequest
+ {
+ public static readonly
+ RequestType Type =
+ RequestType.Create("disasterrecovery/backup");
+ }
+}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/DisasterRecovery/DisasterRecoveryService.cs b/src/Microsoft.SqlTools.ServiceLayer/DisasterRecovery/DisasterRecoveryService.cs
new file mode 100644
index 00000000..7b070272
--- /dev/null
+++ b/src/Microsoft.SqlTools.ServiceLayer/DisasterRecovery/DisasterRecoveryService.cs
@@ -0,0 +1,52 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+using Microsoft.SqlTools.Hosting.Protocol;
+using Microsoft.SqlTools.ServiceLayer.DisasterRecovery.Contracts;
+using Microsoft.SqlTools.ServiceLayer.Hosting;
+using Microsoft.SqlTools.ServiceLayer.SqlContext;
+using System;
+using System.Threading.Tasks;
+
+namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery
+{
+ public class DisasterRecoveryService
+ {
+ private static readonly Lazy instance = new Lazy(() => new DisasterRecoveryService());
+
+ ///
+ /// Default, parameterless constructor.
+ ///
+ internal DisasterRecoveryService()
+ {
+ }
+
+ ///
+ /// Gets the singleton instance object
+ ///
+ public static DisasterRecoveryService Instance
+ {
+ get { return instance.Value; }
+ }
+
+ ///
+ /// Initializes the service instance
+ ///
+ public void InitializeService(ServiceHost serviceHost )
+ {
+ serviceHost.SetRequestHandler(BackupRequest.Type, HandleBackupRequest);
+ }
+
+ ///
+ /// Handles a backup request
+ ///
+ internal static async Task HandleBackupRequest(
+ BackupParams backupParams,
+ RequestContext requestContext)
+ {
+ await requestContext.SendResult(new BackupResponse());
+ }
+ }
+}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs b/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs
index a69eec00..49325883 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs
@@ -6,12 +6,14 @@ using Microsoft.SqlTools.Credentials;
using Microsoft.SqlTools.Extensibility;
using Microsoft.SqlTools.Hosting;
using Microsoft.SqlTools.Hosting.Protocol;
+using Microsoft.SqlTools.ServiceLayer.Admin;
using Microsoft.SqlTools.ServiceLayer.Connection;
+using Microsoft.SqlTools.ServiceLayer.DisasterRecovery;
using Microsoft.SqlTools.ServiceLayer.EditData;
using Microsoft.SqlTools.ServiceLayer.Hosting;
using Microsoft.SqlTools.ServiceLayer.LanguageServices;
using Microsoft.SqlTools.ServiceLayer.Metadata;
-using Microsoft.SqlTools.ServiceLayer.ObjectExplorer;
+using Microsoft.SqlTools.ServiceLayer.ObjectExplorer;
using Microsoft.SqlTools.ServiceLayer.QueryExecution;
using Microsoft.SqlTools.ServiceLayer.Scripting;
using Microsoft.SqlTools.ServiceLayer.SqlContext;
@@ -85,6 +87,12 @@ namespace Microsoft.SqlTools.ServiceLayer
ScriptingService.Instance.InitializeService(serviceHost);
serviceProvider.RegisterSingleService(ScriptingService.Instance);
+ AdminService.Instance.InitializeService(serviceHost);
+ serviceProvider.RegisterSingleService(AdminService.Instance);
+
+ DisasterRecoveryService.Instance.InitializeService(serviceHost);
+ serviceProvider.RegisterSingleService(DisasterRecoveryService.Instance);
+
InitializeHostedServices(serviceProvider, serviceHost);
serviceHost.ServiceProvider = serviceProvider;
diff --git a/src/Microsoft.SqlTools.ServiceLayer/TaskServices/Contracts/ListTasksRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/TaskServices/Contracts/ListTasksRequest.cs
new file mode 100644
index 00000000..5bcb0e07
--- /dev/null
+++ b/src/Microsoft.SqlTools.ServiceLayer/TaskServices/Contracts/ListTasksRequest.cs
@@ -0,0 +1,31 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+using Microsoft.SqlTools.Hosting.Protocol.Contracts;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace Microsoft.SqlTools.ServiceLayer.TaskServices.Contracts
+{
+
+ public class ListTasksParams
+ {
+ bool ListActiveTasksOnly { get; set; }
+ }
+
+ public class ListTasksResponse
+ {
+ TaskInfo[] Tasks { get; set; }
+ }
+
+ public class ListTasksRequest
+ {
+ public static readonly
+ RequestType Type =
+ RequestType.Create("tasks/listtasks");
+ }
+}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/TaskServices/Contracts/TaskInfo.cs b/src/Microsoft.SqlTools.ServiceLayer/TaskServices/Contracts/TaskInfo.cs
new file mode 100644
index 00000000..47f2a59b
--- /dev/null
+++ b/src/Microsoft.SqlTools.ServiceLayer/TaskServices/Contracts/TaskInfo.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace Microsoft.SqlTools.ServiceLayer.TaskServices.Contracts
+{
+ public enum TaskState
+ {
+ NotStarted = 0,
+ Running = 1,
+ Complete = 2
+ }
+
+ public class TaskInfo
+ {
+ public int TaskId { get; set; }
+
+ public TaskState State { get; set; }
+ }
+}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/TaskServices/TaskService.cs b/src/Microsoft.SqlTools.ServiceLayer/TaskServices/TaskService.cs
new file mode 100644
index 00000000..a0156c20
--- /dev/null
+++ b/src/Microsoft.SqlTools.ServiceLayer/TaskServices/TaskService.cs
@@ -0,0 +1,52 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+using Microsoft.SqlTools.Hosting.Protocol;
+using Microsoft.SqlTools.ServiceLayer.Hosting;
+using Microsoft.SqlTools.ServiceLayer.SqlContext;
+using Microsoft.SqlTools.ServiceLayer.TaskServices.Contracts;
+using System;
+using System.Threading.Tasks;
+
+namespace Microsoft.SqlTools.ServiceLayer.TaskServices
+{
+ public class TaskService
+ {
+ private static readonly Lazy instance = new Lazy(() => new TaskService());
+
+ ///
+ /// Default, parameterless constructor.
+ ///
+ internal TaskService()
+ {
+ }
+
+ ///
+ /// Gets the singleton instance object
+ ///
+ public static TaskService Instance
+ {
+ get { return instance.Value; }
+ }
+
+ ///
+ /// Initializes the service instance
+ ///
+ public void InitializeService(ServiceHost serviceHost, SqlToolsContext context)
+ {
+ serviceHost.SetRequestHandler(ListTasksRequest.Type, HandleListTasksRequest);
+ }
+
+ ///
+ /// Handles a list tasks request
+ ///
+ internal static async Task HandleListTasksRequest(
+ ListTasksParams listTasksParams,
+ RequestContext requestContext)
+ {
+ await requestContext.SendResult(new ListTasksResponse());
+ }
+ }
+}
diff --git a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Admin/CreateDatabaseTests.cs b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Admin/CreateDatabaseTests.cs
new file mode 100644
index 00000000..3cc64b49
--- /dev/null
+++ b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Admin/CreateDatabaseTests.cs
@@ -0,0 +1,16 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Admin
+{
+ public class CreateDatabaseTests
+ {
+ }
+}
diff --git a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Admin/CreateLoginTests.cs b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Admin/CreateLoginTests.cs
new file mode 100644
index 00000000..c4716a95
--- /dev/null
+++ b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/Admin/CreateLoginTests.cs
@@ -0,0 +1,16 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Admin
+{
+ public class CreateLoginTests
+ {
+ }
+}
diff --git a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/DisasterRecovery/BackupTests.cs b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/DisasterRecovery/BackupTests.cs
new file mode 100644
index 00000000..dfc44e85
--- /dev/null
+++ b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/DisasterRecovery/BackupTests.cs
@@ -0,0 +1,16 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace Microsoft.SqlTools.ServiceLayer.UnitTests.DisasterRecovery
+{
+ public class BackupTests
+ {
+ }
+}