/// <summary>
        /// Constructs a new service host intended to be used as a JSON RPC server. StdIn is used
        /// for receiving messages, StdOut is used for sending messages. Services will be
        /// discovered from the assemblies in the current directory listed in
        /// <paramref name="assembliesToInclude"/>
        /// </summary>
        /// <param name="directory">Directory to include assemblies from</param>
        /// <param name="assembliesToInclude">
        /// List of assembly names in the current directory to search for service exports
        /// </param>
        /// <returns>Service host as a JSON RPC server over StdI/O</returns>
        public static ExtensibleServiceHost CreateDefaultExtensibleServer(string directory, IList <string> assembliesToInclude)
        {
            Validate.IsNotNull(nameof(assembliesToInclude), assembliesToInclude);

            ExtensionServiceProvider serviceProvider = ExtensionServiceProvider.CreateFromAssembliesInDirectory(directory, assembliesToInclude);

            return(new ExtensibleServiceHost(serviceProvider, new StdioServerChannel()));
        }
Esempio n. 2
0
 public ResourceProviderServiceTests()
 {
     HostMock = new Mock <IProtocolEndpoint>();
     AuthenticationManagerMock = new Mock <IAzureAuthenticationManager>();
     ResourceManagerMock       = new Mock <IAzureResourceManager>();
     ServiceProvider           = ExtensionServiceProvider.CreateFromAssembliesInDirectory(ResourceProviderHostLoader.GetResourceProviderExtensionDlls());
     ServiceProvider.RegisterSingleService <IAzureAuthenticationManager>(AuthenticationManagerMock.Object);
     ServiceProvider.RegisterSingleService <IAzureResourceManager>(ResourceManagerMock.Object);
     HostLoader.InitializeHostedServices(ServiceProvider, HostMock.Object);
     ResourceProviderService = ServiceProvider.GetService <ResourceProviderService>();
 }
        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. 4
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);
            }
        }