--- slug: servicestack-side-by-side-with-another-web-framework title: Run side-by-side with another Framework --- :::tip These docs only apply to ASP .NET Framework MVC projects, for [.NET Core](/netcore) see [MVC Project Templates](/templates/mvc) ::: In order to avoid conflicts with your existing ASP.NET web framework it is recommended to host your ServiceStack web services at a custom path. This will allow you to use ServiceStack together with an existing web framework e.g. ASP.NET MVC 3 or FUBU MVC, etc. The location configuration (to your root Web.config file) below hosts your webservices at custom path: `/api` ```xml ``` Configuration for also running on Mono / IIS 6: ```xml ``` ::: info Due to limitations in IIS 6 - the `/custompath` must end with `.ashx`, e.g: `path="api.ashx"` ::: You also need to configure the root path in your AppHost. ```csharp public override void Configure(Container container) { SetConfig(new HostConfig { HandlerFactoryPath = "api" }); } ``` **To avoid conflicts with ASP.NET MVC add an ignore rule** in `Global.asax RegisterRoutes` method e.g: ```csharp routes.IgnoreRoute ("api/{*pathInfo}"); ``` See [mvc-netfx](https://github.com/NetFrameworkTemplates/mvc-netfx) for a working ServiceStack + MVC Project Template. **For MVC4 applications you also need to unregister WebApi**, by commenting out this line in `Global.asax.cs`: ```csharp //WebApiConfig.Register(GlobalConfiguration.Configuration); ``` If you used Nuget to install the bits, remove the original handler from the web.config system.webserver node e.g: ```xml ``` ## Enable ASP.NET Sessions If you want ServiceStack Services to be able to access ASP.NET Session you can use a decorated `IHttpHandlerFactory` below that returns a `SessionHandlerDecorator` that's decorated with `IRequiresSessionState` to tell ASP.NET to enable Sessions for these handlers: ```csharp namespace MyApp { public class SessionHttpHandlerFactory : IHttpHandlerFactory { private static readonly HttpHandlerFactory Factory = new HttpHandlerFactory(); public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string path) { var handler = Factory.GetHandler(context, requestType, url, path); return handler == null ? null : new SessionHandlerDecorator((IHttpAsyncHandler)handler); } public void ReleaseHandler(IHttpHandler handler) => Factory.ReleaseHandler(handler); } public class SessionHandlerDecorator : IHttpAsyncHandler, IRequiresSessionState { private IHttpAsyncHandler Handler { get; set; } internal SessionHandlerDecorator(IHttpAsyncHandler handler) => Handler = handler; public bool IsReusable => Handler.IsReusable; public void ProcessRequest(HttpContext context) => Handler.ProcessRequest(context); public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) => Handler.BeginProcessRequest(context, cb, extraData); public void EndProcessRequest(IAsyncResult result) => Handler.EndProcessRequest(result); } } ``` Then replace the existing `ServiceStack.HttpHandlerFactory` registration with your decorated implementation above, e.g: ```xml ``` ### Resources * [Example config files for Starter Templates](https://github.com/ServiceStackApps/LiveDemos#starter-templates)