示例#1
0
        private static void Configure(string profile)
        {
            // read configuration values
            var builder = new Microsoft.Extensions.Configuration.ConfigurationBuilder()
                          .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
                          .AddJsonFile("appsettings.json", false)
                          .AddJsonFile($"{profile}.json", false);
            var configurationRoot = builder.Build();

            // configure logging
            _loggerFactory = new LoggerFactory();
            _loggerFactory.AddConsole(configurationRoot.GetSection("Logging"));
            _loggerFactory.AddNLog();

            LogManager.Configuration = new XmlLoggingConfiguration("nlog.config", true);

            _logger = _loggerFactory.CreateLogger("TestServer");

            // configure caching
            var distributedCache = DistributedCacheFactory.Create();

            // set up address registry
            var addressRegistrySettings = new AddressRegistrySettings();

            configurationRoot.GetSection("AddressRegistrySettings").Bind(addressRegistrySettings);
            addressRegistrySettings.WcfConfiguration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            var addressRegistry = new AddressRegistry(addressRegistrySettings, distributedCache);

            // set up collaboration registry
            var collaborationProtocolRegistrySettings = new CollaborationProtocolRegistrySettings();

            configurationRoot.GetSection("CollaborationProtocolRegistrySettings").Bind(collaborationProtocolRegistrySettings);
            collaborationProtocolRegistrySettings.WcfConfiguration =
                ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

            var collaborationProtocolRegistry = new CollaborationProtocolRegistry(collaborationProtocolRegistrySettings, distributedCache, addressRegistry);

            _serverSettings = new ServerSettings();
            configurationRoot.GetSection("ServerSettings").Bind(_serverSettings);

            // set up messaging
            var messagingSettings = new MessagingSettings();

            configurationRoot.GetSection("MessagingSettings").Bind(messagingSettings);

            messagingSettings.ServiceBus.Synchronous.ReplyQueueMapping.Add(Environment.MachineName, "DUMMY"); // we just need a value, it will never be used
            messagingSettings.LogPayload = true;

            _messagingServer = new MessagingServer(messagingSettings, _logger, _loggerFactory, collaborationProtocolRegistry, addressRegistry);

            _messagingServer.RegisterAsynchronousMessageReceivedStartingCallback((m) =>
            {
                MappedDiagnosticsLogicalContext.Set("correlationId", m.MessageId);
            });
            _messagingServer.RegisterAsynchronousMessageReceivedCallback((m) =>
            {
                if (m.Payload.ToString().Contains("ThrowException"))
                {
                    throw new InvalidOperationException();
                }

                var path = Path.Combine(_serverSettings.DestinationDirectory, "Asynchronous");
                if (Directory.Exists(path) == false)
                {
                    Directory.CreateDirectory(path);
                }
                var fileName = Path.Combine(path, m.MessageId + ".xml");
                using (var sw = File.CreateText(fileName))
                {
                    m.Payload.Save(sw);
                }
            });
            _messagingServer.RegisterAsynchronousMessageReceivedCompletedCallback((m) =>
            {
                MappedDiagnosticsLogicalContext.Set("correlationId", m.MessageId);
            });

            _messagingServer.RegisterSynchronousMessageReceivedStartingCallback((m) =>
            {
                MappedDiagnosticsLogicalContext.Set("correlationId", string.Empty);// reset correlation id
            });
            _messagingServer.RegisterSynchronousMessageReceivedCallback((m) =>
            {
                var path = Path.Combine(_serverSettings.DestinationDirectory, "Synchronous");
                if (Directory.Exists(path) == false)
                {
                    Directory.CreateDirectory(path);
                }
                var fileName = Path.Combine(path, m.MessageId + ".xml");
                using (var sw = File.CreateText(fileName))
                {
                    m.Payload.Save(sw);
                }
                return(new XDocument(new XElement("DummyResponse")));
            });
            _messagingServer.RegisterSynchronousMessageReceivedCompletedCallback((m) =>
            {
                MappedDiagnosticsLogicalContext.Set("correlationId", string.Empty); // reset correlation id
            });
        }