Пример #1
0
        private static IContainer RegisterDependencies()
        {
            var containerBuilder = new ContainerBuilder();


            containerBuilder.Register(c =>
            {
                var logger = new TraceLogger();

                var store = AzureWebHookStore.CreateStore(logger);

                var sender = new DataflowWebHookSender(logger);

                var manager = new WebHookManager(store, sender, logger);

                return(manager);
            })
            .As <IWebHookManager>()
            .InstancePerLifetimeScope();

            containerBuilder.RegisterType <Functions>()
            .AsSelf()
            .InstancePerLifetimeScope();

            return(containerBuilder.Build());
        }
Пример #2
0
        public static void Main(string[] args)
        {
            // Set up default WebHook logger
            ILogger logger = new TraceLogger();

            // Set the WebHook Store we want to get WebHook subscriptions from. Azure store requires
            // a valid Azure Storage connection string named MS_AzureStoreConnectionString.
            IWebHookStore store = AzureWebHookStore.CreateStore(logger);

            // Set the sender we want to actually send out the WebHooks. We could also
            // enqueue messages for scale out.
            IWebHookSender sender = new DataflowWebHookSender(logger);

            // Set up WebHook manager which we use for creating notifications.
            Manager = new WebHookManager(store, sender, logger);

            // Initialize WebJob
            var listener = ConfigurationManager.ConnectionStrings["WebHookListener"].ConnectionString;
            JobHostConfiguration config = new JobHostConfiguration
            {
                StorageConnectionString = listener
            };
            JobHost host = new JobHost(config);

            host.RunAndBlock();
        }
Пример #3
0
        public void Dispose_Succeeds()
        {
            // Arrange
            IOptions <MvcJsonOptions> options = Options.Create(new MvcJsonOptions());
            var s = new DataflowWebHookSender(_loggerMock.Object, options);

            // Act
            s.Dispose();
            s.Dispose();
        }
Пример #4
0
        private void Form1_Load(object sender, EventArgs e)
        {
            //設定 Logger
            Logger = new TraceLogger();
            //設定 SQL 來存 WebHook 的資料
            Store = SqlWebHookStore.CreateStore(Logger);
            //Sender 使用 DataflowWebHookSender
            var webhookSender = new DataflowWebHookSender(Logger);

            Manager = new WebHookManager(Store, webhookSender, Logger);
        }
Пример #5
0
        public async Task SendWebHook_StopsOnLastLastFailureOrFirstSuccessAndFirstGone(TimeSpan[] delays, Func <HttpRequestMessage, int, Task <HttpResponseMessage> > handler, int expectedOffset, SendResult expectedResult)
        {
            // Arrange
            var             actualResult  = SendResult.None;
            var             done          = new ManualResetEvent(initialState: false);
            WebHookWorkItem final         = null;
            var             actualRetries = 0;

            _sender = new TestDataflowWebHookSender(_loggerMock.Object, delays, _options, _httpClient, _mvcJsonOptions,
                                                    onWebHookRetry: item =>
            {
                actualRetries++;
            },
                                                    onWebHookSuccess: item =>
            {
                final        = item;
                actualResult = SendResult.Success;
                done.Set();
            },
                                                    onWebHookGone: item =>
            {
                final        = item;
                actualResult = SendResult.Gone;
                done.Set();
            },
                                                    onWebHookFailure: item =>
            {
                final        = item;
                actualResult = SendResult.Failure;
                done.Set();
            });
            _handlerMock.Handler = handler;
            var notification = new Notification("a1", new { a1 = "a1" });
            var webHook      = WebHookManagerTests.CreateWebHook();
            var workItem     = new WebHookWorkItem(webHook, notification)
            {
                Id = "1234567890",
            };

            // Act
            await _sender.SendWebHookWorkItemsAsync(new[] { workItem });

            done.WaitOne();

            // Assert
            var expectedRetries = expectedResult == SendResult.Failure ? Math.Max(0, expectedOffset - 1) : expectedOffset;

            Assert.Equal(expectedRetries, actualRetries);
            Assert.Equal(expectedResult, actualResult);
            Assert.Equal(expectedOffset, final.Offset);
        }
Пример #6
0
        public static IWebHookSender GetSender(ILogger logger)
        {
            if (_sender != null)
            {
                return(_sender);
            }
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            IWebHookSender instance = new DataflowWebHookSender(logger);

            Interlocked.CompareExchange(ref _sender, instance, null);
            return(_sender);
        }
Пример #7
0
        public static IWebHookSender GetSender(ILogger logger)
        {
            if (_sender != null)
            {
                return _sender;
            }
            if (logger == null)
            {
                throw new ArgumentNullException("logger");
            }

            IWebHookSender instance = new DataflowWebHookSender(logger);
            Interlocked.CompareExchange(ref _sender, instance, null);
            return _sender;
        }