A little background info –
I’m trying to host a RESTful WCF service on Azure. As I understand, unless I have the ASP.NET type hosting on the role, I don’t really need the global.asax class (which has the application_start method).
From basic prototyping, all I needed was the svc file and the implementation behind it and it automatically gets initialized on role startup (I mean, hosted up on IIS).This is great because I need no extra code other than web.config and my service is up and running. I don’t need to create a new service host and start listening on it, etc. I’m able to deploy the role and POST messages to my service.
The problem –
I have custom logging and initialization classes implemented that I need to initialize when my service starts up. I configured my service to be a singleton and I’m not sure where I should put my custom initialization components.
Without an explicit application start method and my service configured as a singleton, can I assume that when the first request comes in, my service constructor gets called? (along with all my custom initialization?).
Yes, but you should ask yourself whether you really want your service to run as a singleton. If you’re happy with this then it will work fine; if you don’t want it to run as a singleton then you should look into Russell’s answer using a custom factory.
Look at Should WCF service typically be singleton or not? for some discussion about whether WCF services should be singletons. You need to decide for your situation, but generally WCF services are not singletons unless they need to be.
To implement a custom factory, see this MSDN link Extending Hosting Using ServiceHostFactory. As the link describes, extend the service host factory like so
And then specify your factory in the ServiceHost directive