private static void InitializeRequestHandlersAndServices(UtilityServiceHost serviceHost, SqlToolsContext sqlToolsContext)
        {
            // Load extension provider, which currently finds all exports in current DLL. Can be changed to find based
            // on directory or assembly list quite easily in the future
            ExtensionServiceProvider serviceProvider = ExtensionServiceProvider.CreateFromAssembliesInDirectory(GetResourceProviderExtensionDlls());

            serviceProvider.RegisterSingleService(sqlToolsContext);
            serviceProvider.RegisterSingleService(serviceHost);

            InitializeHostedServices(serviceProvider, serviceHost);

            serviceHost.InitializeRequestHandlers();
        }
Esempio n. 2
0
        private static void InitializeRequestHandlersAndServices(CredentialsServiceHost serviceHost, SqlToolsContext sqlToolsContext)
        {
            // Load extension provider, which currently finds all exports in current DLL. Can be changed to find based
            // on directory or assembly list quite easily in the future
            ExtensionServiceProvider serviceProvider = ExtensionServiceProvider.CreateDefaultServiceProvider();

            serviceProvider.RegisterSingleService(sqlToolsContext);
            serviceProvider.RegisterSingleService(serviceHost);

            CredentialService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(CredentialService.Instance);

            InitializeHostedServices(serviceProvider, serviceHost);

            serviceHost.InitializeRequestHandlers();
        }
Esempio n. 3
0
        private static void InitializeRequestHandlersAndServices(ServiceHost serviceHost, SqlToolsContext sqlToolsContext)
        {
            // Load extension provider, which currently finds all exports in current DLL. Can be changed to find based
            // on directory or assembly list quite easily in the future
            ExtensionServiceProvider serviceProvider = ExtensionServiceProvider.CreateDefaultServiceProvider();

            serviceProvider.RegisterSingleService(sqlToolsContext);
            serviceProvider.RegisterSingleService(serviceHost);

            // Initialize and register singleton services so they're accessible for any MEF service. In the future, these
            // could be updated to be IComposableServices, which would avoid the requirement to define a singleton instance
            // and instead have MEF handle discovery & loading
            WorkspaceService <SqlToolsSettings> .Instance.InitializeService(serviceHost);

            serviceProvider.RegisterSingleService(WorkspaceService <SqlToolsSettings> .Instance);

            LanguageService.Instance.InitializeService(serviceHost, sqlToolsContext);
            serviceProvider.RegisterSingleService(LanguageService.Instance);

            ConnectionService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(ConnectionService.Instance);

            CredentialService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(CredentialService.Instance);

            QueryExecutionService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(QueryExecutionService.Instance);

            InitializeHostedServices(serviceProvider, serviceHost);

            serviceHost.InitializeRequestHandlers();
        }
Esempio n. 4
0
        private static void InitializeRequestHandlersAndServices(ServiceHost serviceHost, SqlToolsContext sqlToolsContext)
        {
            // Load extension provider, which currently finds all exports in current DLL. Can be changed to find based
            // on directory or assembly list quite easily in the future
            ExtensionServiceProvider serviceProvider = ExtensionServiceProvider.CreateDefaultServiceProvider();

            serviceProvider.RegisterSingleService(sqlToolsContext);
            serviceProvider.RegisterSingleService(serviceHost);

            // Initialize and register singleton services so they're accessible for any MEF service. In the future, these
            // could be updated to be IComposableServices, which would avoid the requirement to define a singleton instance
            // and instead have MEF handle discovery & loading
            WorkspaceService <SqlToolsSettings> .Instance.InitializeService(serviceHost);

            serviceProvider.RegisterSingleService(WorkspaceService <SqlToolsSettings> .Instance);

            LanguageService.Instance.InitializeService(serviceHost, sqlToolsContext);
            serviceProvider.RegisterSingleService(LanguageService.Instance);

            ConnectionService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(ConnectionService.Instance);

            CredentialService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(CredentialService.Instance);

            QueryExecutionService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(QueryExecutionService.Instance);

            EditDataService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(EditDataService.Instance);

            MetadataService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(MetadataService.Instance);

            ScriptingService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(ScriptingService.Instance);

            AdminService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(AdminService.Instance);

            AgentService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(AgentService.Instance);

            DisasterRecoveryService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(DisasterRecoveryService.Instance);

            FileBrowserService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(FileBrowserService.Instance);

            ProfilerService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(ProfilerService.Instance);

            SecurityService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(SecurityService.Instance);

            DacFxService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(DacFxService.Instance);

            CmsService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(CmsService.Instance);

            SchemaCompare.SchemaCompareService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(SchemaCompareService.Instance);

            ServerConfigService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(ServerConfigService.Instance);

            ExternalLanguageService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(ExternalLanguageService.Instance);

            SqlAssessmentService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(SqlAssessmentService.Instance);

            InitializeHostedServices(serviceProvider, serviceHost);
            serviceHost.ServiceProvider = serviceProvider;

            serviceHost.InitializeRequestHandlers();
        }
Esempio n. 5
0
        static void Main(string[] args)
        {
            try
            {
                // read command-line arguments
                string         applicationName = Path.ChangeExtension(ServiceName, ".exe");
                CommandOptions commandOptions  = new CommandOptions(args, applicationName);
                if (commandOptions.ShouldExit)
                {
                    return;
                }

                // we are in debug mode
                if (commandOptions.WaitForDebugger)
                {
                    int maxWait   = 30;
                    int waitCount = 0;
                    while (!Debugger.IsAttached && waitCount < maxWait)
                    {
                        Thread.Sleep(500);
                        waitCount++;
                    }
                }

                // configure log file
                string logFilePath = ServiceName;
                if (!string.IsNullOrWhiteSpace(commandOptions.LoggingDirectory))
                {
                    logFilePath = Path.Combine(commandOptions.LoggingDirectory, logFilePath);
                }

                Logger.Instance.Initialize(logFilePath: logFilePath, minimumLogLevel: MinimumLogLevel, isEnabled: commandOptions.EnableLogging);
                Logger.Instance.Write(LogLevel.Normal, "Starting language server host");

                // list all service assemblies that should be loaded by the host
                string[] searchPath = new string[] {
                    "Microsoft.SqlTools.Hosting.v2.dll",
                    //"Microsoft.SqlTools.CoreServices.dll",
                    "Microsoft.SqlTools.LanguageServerProtocol.dll",
                    "Microsoft.SqlTools.Samples.LanguageServerHost.Services.dll",
                };

                ExtensionServiceProvider serviceProvider = ExtensionServiceProvider.CreateFromAssembliesInDirectory(Path.GetDirectoryName(typeof(Program).Assembly.Location), searchPath);
                serviceProvider.RegisterSingleService(SettingsService <LanguageServerSettings> .Instance);

                ExtensibleServiceHost host = new ExtensibleServiceHost(serviceProvider, new StdioServerChannel());

                // TODO: can server capabilities be automatically determined by the registered services?
                host.ServerCapabilities = new ServerCapabilities
                {
                    TextDocumentSync = TextDocumentSyncKind.Incremental
                };

                Logger.Instance.Write(LogLevel.Verbose, "Starting wait loop");

                host.Start();
                host.WaitForExit();
            }
            catch (Exception e)
            {
                Logger.Instance.Write(LogLevel.Error, string.Format("An unhandled exception occurred: {0}", e));
                Environment.Exit(1);
            }
        }