// Please set the following connection strings in app.config for this WebJob to run: // AzureWebJobsDashboard and AzureWebJobsStorage static void Main() { var config = new JobHostConfiguration(); var slackConfig = new SlackConfiguration(); WebHooksConfiguration webhookConfig; if(config.IsDevelopment) { config.UseDevelopmentSettings(); webhookConfig = new WebHooksConfiguration(3000); } else { webhookConfig = new WebHooksConfiguration(); } // These are optional and will be applied if no other value is specified. /* slackConfig.WebHookUrl = ""; // IT IS A BAD THING TO HARDCODE YOUR WEBHOOKURL, USE THE APP SETTING "AzureWebJobsSlackWebHookKeyName" slackConfig.IconEmoji = ""; slackConfig.Username = ""; slackConfig.Channel = ""; */ config.UseSlack(slackConfig); config.UseWebHooks(webhookConfig); var host = new JobHost(config); // The following code ensures that the WebJob will be running continuously host.RunAndBlock(); }
public WebHookDispatcher(WebHooksConfiguration webHooksConfig, JobHost host, JobHostConfiguration config, TraceWriter trace) { _functions = new ConcurrentDictionary<string, ITriggeredFunctionExecutor>(); _trace = trace; _port = webHooksConfig.Port; _types = config.TypeLocator.GetTypes().ToArray(); _host = host; }
public WebHookDispatcher(WebHooksConfiguration webHooksConfig, JobHost host, JobHostConfiguration config, TraceWriter trace) { _functions = new ConcurrentDictionary <string, ITriggeredFunctionExecutor>(); _trace = trace; _port = webHooksConfig.Port; _types = config.TypeLocator.GetTypes().ToArray(); _host = host; _webHookReceiverManager = new WebHookReceiverManager(_trace); }
public static void Main(string[] args) { JobHostConfiguration config = new JobHostConfiguration(); config.Tracing.ConsoleLevel = TraceLevel.Verbose; // Set to a short polling interval to facilitate local // debugging. You wouldn't want to run prod this way. config.Queues.MaxPollingInterval = TimeSpan.FromSeconds(2); FilesConfiguration filesConfig = new FilesConfiguration(); if (string.IsNullOrEmpty(filesConfig.RootPath)) { // when running locally, set this to a valid directory filesConfig.RootPath = @"c:\temp\files"; } EnsureSampleDirectoriesExist(filesConfig.RootPath); config.UseFiles(filesConfig); config.UseTimers(); config.UseSample(); config.UseCore(); var sendGridConfiguration = new SendGridConfiguration() { ToAddress = "*****@*****.**", FromAddress = new MailAddress("*****@*****.**", "WebJobs Extensions Samples") }; config.UseSendGrid(sendGridConfiguration); ConfigureTraceMonitor(config, sendGridConfiguration); WebHooksConfiguration webHooksConfig = new WebHooksConfiguration(); webHooksConfig.UseReceiver<GitHubWebHookReceiver>(); config.UseWebHooks(webHooksConfig); JobHost host = new JobHost(config); host.Call(typeof(MiscellaneousSamples).GetMethod("ExecutionContext")); host.Call(typeof(FileSamples).GetMethod("ReadWrite")); host.Call(typeof(SampleSamples).GetMethod("Sample_BindToStream")); host.Call(typeof(SampleSamples).GetMethod("Sample_BindToString")); host.Call(typeof(TableSamples).GetMethod("CustomBinding")); // When running in Azure Web Apps, a JobHost will gracefully shut itself // down, ensuring that all listeners are stopped, etc. For this sample, // we want to ensure that same behavior when the console app window is // closed. This ensures that Singleton locks that are taken are released // immediately, etc. ShutdownHandler.Register(() => { host.Stop(); }); host.RunAndBlock(); }
// Please set the following connection strings in app.config for this WebJob to run: // AzureWebJobsDashboard and AzureWebJobsStorage static void Main() { var config = new JobHostConfiguration(); config.Tracing.ConsoleLevel = System.Diagnostics.TraceLevel.Verbose; var host = new JobHost(config); var webHooksConfig = new WebHooksConfiguration(); webHooksConfig.UseReceiver<GitHubWebHookReceiver>(); config.UseWebHooks(webHooksConfig); // The following code ensures that the WebJob will be running continuously host.RunAndBlock(); }
/// <summary> /// Enables use of the WebHooks extensions. /// </summary> /// <remarks> /// <para> /// In addition to enabling HTTP POST invocation of functions decorated with <see cref="WebHookTriggerAttribute"/> /// this also enables HTTP invocation of other functions as well. For functions not decorated with /// <see cref="WebHookTriggerAttribute"/>, they can be invoked via an implicit route of the form /// {TypeName}/{FunctionName}. The body should be a valid json string representing the data that you would /// pass in to <see cref="JobHost.Call(System.Reflection.MethodInfo, object)"/>. /// </para> /// <para> /// Authentication of incoming requests is handled outside of this extension. When running under the normal /// Azure Web App host, the extension will be listening on a loopback port that the SCM host has opened for /// the job, and SCM forwards authenticated requests through (SCM credentials are required to invoke the SCM endpoints). /// </para> /// </remarks> /// <param name="config">The <see cref="JobHostConfiguration"/> to configure.</param> /// <param name="webHooksConfig">The <see cref="WebHooksConfiguration"/> to use.</param> public static void UseWebHooks(this JobHostConfiguration config, WebHooksConfiguration webHooksConfig = null) { if (config == null) { throw new ArgumentNullException("config"); } if (webHooksConfig == null) { webHooksConfig = new WebHooksConfiguration(); } config.RegisterExtensionConfigProvider(new WebHooksExtensionConfig(webHooksConfig)); }
// Please set the following connection strings in app.config for this WebJob to run: // AzureWebJobsDashboard and AzureWebJobsStorage static void Main() { JobHostConfiguration config = new JobHostConfiguration(); config.Tracing.ConsoleLevel = System.Diagnostics.TraceLevel.Verbose; config.UseFiles(); config.UseTimers(); WebHooksConfiguration webhooksConfiguration = new WebHooksConfiguration(); config.UseWebHooks(webhooksConfiguration); var host = new JobHost(config); // The following code ensures that the WebJob will be running continuously host.RunAndBlock(); }
public static void Main(string[] args) { JobHostConfiguration config = new JobHostConfiguration(); config.Tracing.ConsoleLevel = TraceLevel.Verbose; // Set to a short polling interval to facilitate local // debugging. You wouldn't want to run prod this way. config.Queues.MaxPollingInterval = TimeSpan.FromSeconds(2); FilesConfiguration filesConfig = new FilesConfiguration(); if (string.IsNullOrEmpty(filesConfig.RootPath)) { // when running locally, set this to a valid directory filesConfig.RootPath = @"c:\temp\files"; } EnsureSampleDirectoriesExist(filesConfig.RootPath); config.UseFiles(filesConfig); config.UseTimers(); config.UseSample(); config.UseCore(); var sendGridConfiguration = new SendGridConfiguration() { ToAddress = "*****@*****.**", FromAddress = new MailAddress("*****@*****.**", "WebJobs Extensions Samples") }; config.UseSendGrid(sendGridConfiguration); ConfigureTraceMonitor(config, sendGridConfiguration); WebHooksConfiguration webHooksConfig = new WebHooksConfiguration(); webHooksConfig.UseReceiver<GitHubWebHookReceiver>(); config.UseWebHooks(webHooksConfig); JobHost host = new JobHost(config); host.Call(typeof(MiscellaneousSamples).GetMethod("ExecutionContext")); host.Call(typeof(FileSamples).GetMethod("ReadWrite")); host.Call(typeof(SampleSamples).GetMethod("Sample_BindToStream")); host.Call(typeof(SampleSamples).GetMethod("Sample_BindToString")); host.Call(typeof(TableSamples).GetMethod("CustomBinding")); host.RunAndBlock(); }
public static void Main(string[] args) { JobHostConfiguration config = new JobHostConfiguration(); FilesConfiguration filesConfig = new FilesConfiguration(); // See https://github.com/Azure/azure-webjobs-sdk/wiki/Running-Locally for details // on how to set up your local environment if (config.IsDevelopment) { config.UseDevelopmentSettings(); filesConfig.RootPath = @"c:\temp\files"; } config.UseFiles(filesConfig); config.UseTimers(); config.UseSample(); config.UseCore(); var sendGridConfiguration = new SendGridConfiguration() { ToAddress = "*****@*****.**", FromAddress = new MailAddress("*****@*****.**", "WebJobs Extensions Samples") }; config.UseSendGrid(sendGridConfiguration); ConfigureTraceMonitor(config, sendGridConfiguration); EnsureSampleDirectoriesExist(filesConfig.RootPath); WebHooksConfiguration webHooksConfig = new WebHooksConfiguration(); webHooksConfig.UseReceiver<GitHubWebHookReceiver>(); config.UseWebHooks(webHooksConfig); JobHost host = new JobHost(config); host.Call(typeof(MiscellaneousSamples).GetMethod("ExecutionContext")); host.Call(typeof(FileSamples).GetMethod("ReadWrite")); host.Call(typeof(SampleSamples).GetMethod("Sample_BindToStream")); host.Call(typeof(SampleSamples).GetMethod("Sample_BindToString")); host.Call(typeof(TableSamples).GetMethod("CustomBinding")); host.RunAndBlock(); }
private void ApplyConfiguration(JobHostConfiguration config) { // Apply Queues configuration JObject configSection = (JObject)Configuration["queues"]; JToken value = null; if (configSection != null) { if (configSection.TryGetValue("maxPollingInterval", out value)) { config.Queues.MaxPollingInterval = TimeSpan.FromMilliseconds((int)value); } if (configSection.TryGetValue("batchSize", out value)) { config.Queues.BatchSize = (int)value; } if (configSection.TryGetValue("maxDequeueCount", out value)) { config.Queues.MaxDequeueCount = (int)value; } if (configSection.TryGetValue("newBatchThreshold", out value)) { config.Queues.NewBatchThreshold = (int)value; } } // Apply ServiceBus configuration ServiceBusConfiguration sbConfig = new ServiceBusConfiguration(); configSection = (JObject)Configuration["serviceBus"]; value = null; if (configSection != null) { if (configSection.TryGetValue("maxConcurrentCalls", out value)) { sbConfig.MessageOptions.MaxConcurrentCalls = (int)value; } } config.UseServiceBus(sbConfig); // Apply Tracing configuration configSection = (JObject)Configuration["tracing"]; if (configSection != null && configSection.TryGetValue("consoleLevel", out value)) { TraceLevel consoleLevel; if (Enum.TryParse<TraceLevel>((string)value, true, out consoleLevel)) { config.Tracing.ConsoleLevel = consoleLevel; } } // Apply WebHooks configuration WebHooksConfiguration webHooksConfig = new WebHooksConfiguration(); configSection = (JObject)Configuration["webhooks"]; if (configSection != null && configSection.TryGetValue("port", out value)) { webHooksConfig = new WebHooksConfiguration((int)value); } config.UseWebHooks(webHooksConfig); config.UseTimers(); }
internal static void ApplyConfiguration(JObject config, JobHostConfiguration jobHostConfig) { JToken hostId = (JToken)config["id"]; if (hostId == null) { throw new InvalidOperationException("An 'id' must be specified in the host configuration."); } jobHostConfig.HostId = (string)hostId; // Apply Queues configuration JObject configSection = (JObject)config["queues"]; JToken value = null; if (configSection != null) { if (configSection.TryGetValue("maxPollingInterval", out value)) { jobHostConfig.Queues.MaxPollingInterval = TimeSpan.FromMilliseconds((int)value); } if (configSection.TryGetValue("batchSize", out value)) { jobHostConfig.Queues.BatchSize = (int)value; } if (configSection.TryGetValue("maxDequeueCount", out value)) { jobHostConfig.Queues.MaxDequeueCount = (int)value; } if (configSection.TryGetValue("newBatchThreshold", out value)) { jobHostConfig.Queues.NewBatchThreshold = (int)value; } } // Apply Singleton configuration configSection = (JObject)config["singleton"]; value = null; if (configSection != null) { if (configSection.TryGetValue("lockPeriod", out value)) { jobHostConfig.Singleton.LockPeriod = TimeSpan.Parse((string)value); } if (configSection.TryGetValue("listenerLockPeriod", out value)) { jobHostConfig.Singleton.ListenerLockPeriod = TimeSpan.Parse((string)value); } if (configSection.TryGetValue("listenerLockRecoveryPollingInterval", out value)) { jobHostConfig.Singleton.ListenerLockRecoveryPollingInterval = TimeSpan.Parse((string)value); } if (configSection.TryGetValue("lockAcquisitionTimeout", out value)) { jobHostConfig.Singleton.LockAcquisitionTimeout = TimeSpan.Parse((string)value); } if (configSection.TryGetValue("lockAcquisitionPollingInterval", out value)) { jobHostConfig.Singleton.LockAcquisitionPollingInterval = TimeSpan.Parse((string)value); } } // Apply ServiceBus configuration ServiceBusConfiguration sbConfig = new ServiceBusConfiguration(); configSection = (JObject)config["serviceBus"]; value = null; if (configSection != null) { if (configSection.TryGetValue("maxConcurrentCalls", out value)) { sbConfig.MessageOptions.MaxConcurrentCalls = (int)value; } } jobHostConfig.UseServiceBus(sbConfig); // Apply Tracing configuration configSection = (JObject)config["tracing"]; if (configSection != null && configSection.TryGetValue("consoleLevel", out value)) { TraceLevel consoleLevel; if (Enum.TryParse<TraceLevel>((string)value, true, out consoleLevel)) { jobHostConfig.Tracing.ConsoleLevel = consoleLevel; } } // Apply WebHooks configuration WebHooksConfiguration webHooksConfig = new WebHooksConfiguration(); configSection = (JObject)config["webhooks"]; if (configSection != null && configSection.TryGetValue("port", out value)) { webHooksConfig = new WebHooksConfiguration((int)value); } jobHostConfig.UseWebHooks(webHooksConfig); jobHostConfig.UseTimers(); }
public WebHooksExtensionConfig(WebHooksConfiguration webHooksConfig) { _webHooksConfig = webHooksConfig; }