I'm trying to setup a custom OWIN startup class for an Umbraco 8.4.0 project which was setup with Umbraco Cloud as-a-service. The issue is I can't seem to get the project to recognise my custom startup file exists. Here is the code:
[assembly: OwinStartup(typeof(FischyMusic.Startup))]
namespace FischyMusic
{
public class Startup : UmbracoDefaultOwinStartup
{
public override void Configuration(IAppBuilder app)
{
//ensure the default options are configured
base.Configuration(app);
// Configure hangfire
var options = new SqlServerStorageOptions { PrepareSchemaIfNecessary = true };
const string umbracoConnectionName = Umbraco.Core.Constants.System.UmbracoConnectionName;
var connectionString = System.Configuration
.ConfigurationManager
.ConnectionStrings[umbracoConnectionName]
.ConnectionString;
GlobalConfiguration.Configuration
.UseSqlServerStorage(connectionString, options);
// Give hangfire a URL and start the server
app.UseHangfireDashboard("/hangfire");
app.UseHangfireServer();
}
}
}
And in my web config file I have:
<add key="owin:appStartup" value="Startup" />
I have also tried removing the above key completely from the web config file, as my understanding is that it isn't necessary when I am specifying the OwinStartup with this line in my Startup class:
I have been able to get this working in a seperate project that does not sit within Umbraco Cloud. I am wondering if the issue is that Umbraco Cloud creates a ASP.NET Web Site Project rather than a ASP.NET Web Application Project?
Any help would be greatly appreciated, I've been stuck on this for a few days now.
Thanks for your help. Yes, the only reason I want to do this is to configure hangtime. If there is another way to do this that you could point me in the direction of I would really appreciate it!
As an aside, I have tried the method you used with the named string and that didn't work for me either.
So you can take advantage of the Composer features of v8, the following is also setting it up to a HangFire job can take advantage of the built in LightInject DI container.
[RuntimeLevel(MinLevel = RuntimeLevel.Boot)]
public class HangfireStartup : IComposer
{
public void Compose(Composition composition)
{
UmbracoDefaultOwinStartup.MiddlewareConfigured += UmbracoDefaultOwinStartup_MiddlewareConfigured;
}
private void UmbracoDefaultOwinStartup_MiddlewareConfigured(object sender, OwinMiddlewareConfiguredEventArgs e)
{
StartHanfgire(e.AppBuilder);
OnHangfireStarted(new HangfireStartedArgs(e.AppBuilder));
}
private void StartHanfgire(IAppBuilder app)
{
//Configure Hangfire
var options = new SqlServerStorageOptions { PrepareSchemaIfNecessary = true, QueuePollInterval = TimeSpan.FromSeconds(30) };
const string defaultUmbracoConnectionName = Umbraco.Core.Constants.System.UmbracoConnectionName;
var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings[defaultUmbracoConnectionName].ConnectionString;
var serviceContainer = new LightInject.ServiceContainer();
foreach (var t in (Current.Factory.Concrete as LightInject.ServiceContainer).AvailableServices)
serviceContainer.Register(t);
serviceContainer.ScopeManagerProvider = new PerLogicalCallContextScopeManagerProvider();
GlobalConfiguration.Configuration.UseSqlServerStorage(connectionString, options)
.UseLightInjectActivator(serviceContainer);
//Give hangfire a URL and start the server
app.UseHangfireDashboard("/umbraco/hangfire", new DashboardOptions { AppPath = null, Authorization = new[] { new UmbracoHangfireAuthorizationFilter() } });
app.UseHangfireServer();
}
public static event EventHandler<HangfireStartedArgs> HangfireStarted;
internal static void OnHangfireStarted(HangfireStartedArgs args)
{
HangfireStarted?.Invoke(null, args);
}
}
Awesome, thanks for the example. So how would I get Umbraco to run the example HangfireStartup class that you provided?
I have created a HangfireStartup.cs file at the root of my web project, with your code inside it, but if I add a breakpoint in that class it doesn't get hit.
Apologies if I'm being stupid here, I don't know much about dependency injection I'm still learning about it.
Thanks
Edit: I should add, I had to remove this line from your example to get my project to build, so maybe that has something to do with Umbraco not picking it up?
Custom OWIN Startup file in Umbraco Cloud project
I'm trying to setup a custom OWIN startup class for an Umbraco 8.4.0 project which was setup with Umbraco Cloud as-a-service. The issue is I can't seem to get the project to recognise my custom startup file exists. Here is the code:
And in my web config file I have:
I have also tried removing the above key completely from the web config file, as my understanding is that it isn't necessary when I am specifying the OwinStartup with this line in my Startup class:
Neither option has worked.
Here is the error that I have been getting:
And here is my file structure for the project:
I have been able to get this working in a seperate project that does not sit within Umbraco Cloud. I am wondering if the issue is that Umbraco Cloud creates a ASP.NET Web Site Project rather than a ASP.NET Web Application Project?
Any help would be greatly appreciated, I've been stuck on this for a few days now.
Thanks
Hi Jack,
Is the reason for the custom OWIN startup class only to configure Hangfire? If so, there is a way to do it without using a custom OWIN class :-)
Nik
In the meantime, when I've done this in a v8 site my attribute on the owin class looks a bit different:
Notice the string name as the first parameter, if you add that into yours and call it "Startup" see if that resolves the issue for you.
Nik
Hi Nik,
Thanks for your help. Yes, the only reason I want to do this is to configure hangtime. If there is another way to do this that you could point me in the direction of I would really appreciate it!
As an aside, I have tried the method you used with the named string and that didn't work for me either.
Jack
Hey Jack,
So you can take advantage of the Composer features of v8, the following is also setting it up to a HangFire job can take advantage of the built in LightInject DI container.
Hi Nik,
Awesome, thanks for the example. So how would I get Umbraco to run the example HangfireStartup class that you provided?
I have created a HangfireStartup.cs file at the root of my web project, with your code inside it, but if I add a breakpoint in that class it doesn't get hit.
Apologies if I'm being stupid here, I don't know much about dependency injection I'm still learning about it.
Thanks
Edit: I should add, I had to remove this line from your example to get my project to build, so maybe that has something to do with Umbraco not picking it up?
is working on a reply...