MVC 2/ASP.NET 4.0 App not working - asp.net

I have picked up a project that is currently broken and I'm trying to fix it.
The application was last working correctly as a .NET 3.5 Web Forms application with some features implemented in MVC 2.0.
The application has become broken when it was upgraded to .NET 4.0 and is running on IIS 7. The Web Forms features work fine, but the MVC 2.0 parts no longer work. Browsing to an MVC URL fails with a 404 error. It seems as if MVC does not kick in when the URL is browsed.
I've put extracts from the web.config below.
<compilation defaultLanguage="c#" debug="true">
<assemblies>
<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</assemblies>
</compilation>
<system.webServer>
<modules>
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</modules>
<handlers>
</handlers>
</system.webServer>
It works on the development PC (Windows 7). Why is MVC not working when deployed to IIS 7 (Win 2k8)?

The modules element requires the runAllManagedModulesForAllRequests to be set as described in this answer.
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</modules>
<handlers>
</handlers>
</system.webServer>

Related

ASP.Net URL Routing only works when `runAllManagedModulesForAllRequests` is true

I have set up URL Routing in IIS. When I have the runAllManagedModulesForAllRequests set to true, the URL routing works.
With the following web.config (and runAllManagedModuesForAllRequests set to false) I get a 404:
<system.web>
<compilation defaultLanguage="c#" debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</assemblies>
</compilation>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="UrlRoutingHandler" />
<add name="UrlRoutingHandler"
preCondition="integratedMode"
verb="*"
path="UrlRouting.axd"
type="System.Web.HttpForbiddenHandler,
System.Web, Version=2.0.0.0,
Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
</handlers>
<modules>
<remove name="UrlRoutingModule" />
<add name="UrlRoutingModule"
type="System.Web.Routing.UrlRoutingModule,
System.Web.Routing,
Version=3.5.0.0,
Culture=neutral,
PublicKeyToken=31BF3856AD364E35"/>
</modules>
</system.webServer>
How do I set up URL Routing for only certain requests?
I have tested this configuration in IIS 7.5 and IIS 8. This is in a web forms application. All URLs demonstrate the 404 behavior.
"runAllManagedModulesForAllRequests" being true, means that the asp.net handler (of course when you are in integrated mode) will fire for all extensions (including extension-less), if you don't have aspx and it's set to false your module can't process it.
You can't setup for a subset of extensions for what you are trying to achieve, but you can in the module filter it yourself to only handle certain extensions.

Url Routing working on localhost but Not on server

I uses asp.net 3.5 for buiding my application,
I use URL routing in it and it works fine in my local host
In my web.config file i do the following setting
<system.web>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="RoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlRoutingModule"/>
<add name="UrlRoutingModule"
type="System.Web.Routing.UrlRoutingModule,
System.Web.Routing, Version=3.5.0.0,
Culture=neutral,
PublicKeyToken=31BF3856AD364E35" />
</modules>
<handlers>
<remove name="UrlRoutingHandler"/>
<add name="UrlRoutingHandler"
preCondition="integratedMode"
verb="*" path="UrlRouting.axd"
type="System.Web.HttpForbiddenHandler,
System.Web, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
</handlers>
</system.webServer>
But when i deploy the application on my server which has IIS 7 and windows 2008 r2 then routing doesn't work there.I think i have to do some iis setting or to change some web.config code....
so please anyone suggest me some answer
Have you thought about implementing Page Routing from you web-app?
One problem that you might incur, is if your using AJAX (Toolkit or Extensions) you will need to implement:
'Ignores any Resource cache references, used heavily in AJAX interactions.
rts.Ignore("{resource}.axd/{*pathInfo}")
To keep from getting Sys is undefined errors while debugging.

ASP.NET URL-rewriting works in Development Server but not in local IIS

I'm programming ASP.NET using visual studio 2010 and IIS 7.5
I have URL-rewriting in Global.asax (RouteTable.Routes.MapPageRoute). It works in Development Server but not in IIS.
Is there a configuration for this in IIS?
There's a webconfig for it... You don't need the remove/add part, that's just showing how you'd explicitly only include this module.
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlRoutingModule" />
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</modules>
<handlers>
<add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</handlers>
</system.webServer>
system.web:
<httpModules>
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpModules>

ASP.NET website too slow while debug=false

I have a performance issue with my ASP.NET MVC3 application,
I noticed that the pages are retrieved very slowly (~30sec per request) when a put debug="false" in the web.config file.
If I keep debug="true" the loading & navigation are not slow at all.
It sounds very strange and I didn't find a similar problem in the web.
here is the compilation section of the web.config :
<compilation targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>
</compilation>
I'm using IIS Express 7.0 on my local machine and IIS 6 on the production server (same issue)

Error using session in IIS 7

After deployment of my website to IIS, I'm getting the following error message when trying to access a session:
Session state can only be used when
enableSessionState is set to true,
either in a configuration file or in
the Page directive. Please also make
sure that
System.Web.SessionStateModule or a
custom session state module is
included in the
\\
section in the application
configuration.
I access it in Page_Load or PreRender events (I tried both versions). With Visual Studio Dev Server it works without a problem. I tried both InProc an SessionState storage, 1 and multiple worker processes. I added a enableSessionState = "true" to my webpage explicitly.
Here is part of web.config:
<system.web>
<globalization culture="ru-RU" uiCulture="ru-RU" />
<compilation debug="true" defaultLanguage="c#">
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Web.Extensions.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>
</compilation>
<pages enableEventValidation="false" enableSessionState="true">
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</controls>
</pages>
<httpHandlers>
<remove verb="*" path="*.asmx" />
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" />
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add name="SearchUrlRewriter" type="Synonymizer.SearchUrlRewriter, Synonymizer, Version=1.0.0.0, Culture=neutral" />
<add name="Session" type="System.Web.SessionStateModule" />
</httpModules>
<sessionState cookieless="UseCookies" cookieName="My_SessionId" mode="InProc" stateNetworkTimeout="5" />
<customErrors mode="Off" />
</system.web>
What else do I need to do to make it work?
I tried to monitor if IIS accesses the aspnet_client folder with Process Monitor and didn't get any access.
The solution happened to be very curious. Though IIS7 jn WIndows 2008R2 in error description says to add SessionStateModule to system.web section, it should be added to system.webServer section.
<system.webServer>
<modules>
<remove name="Session" />
<add name="Session" type="System.Web.SessionState.SessionStateModule, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</modules>
</system.webServer>
Sessions should work on a plain, empty application. That is, all the default values should work.
If it's not working with basic test applications, then IIS may have got confused with your application.
Try deleting your IIS application. Then create a new virtual directory, restart IIS, and then add your application again.
Also, double check your application's ASP.Net settings. Make sure it's set to the correct version of ASP.Net.
While searching, I also ran into...
http://ramonaeid.spaces.live.com/blog/cns!A77704F1DB999BB0!181.entry
Hope that helps.
Make sure that the service names "ASP.NET State Service" is running and then add this to your web.config.
<sessionState mode="InProc" server="127.0.0.1" port="42424" ... >
Reference:
http://msdn.microsoft.com/en-us/library/ms972429.aspx
http://msdn.microsoft.com/en-us/library/h6bb9cz9(VS.71).aspx
Comment:
Maybe is better to manual change the port to something else. This can be done with regedit.
HKLM\Syste\CurrentControlSet\Services\aspnet_state\Parametres\Port -> 42424
Some more infos:
http://msdn.microsoft.com/en-us/library/ff648667.aspx
Has this particular server been used for anything else? Is it a Windows 2008 server and IIS7?
I'm willing to bet that you're missing some server roles for IIS, have you checked those by right clicking "Computer", choosing "Manage", going to the roles management (it's on the primary tree in computer manager) and checking the installed bits for IIS?
If this is IIS6 then you may have other concerns. But I figure we'll start with something simple, see if we can't help you figure this one out.
What is your folder structure. Do you have web configs at a higher folder that may have explicitly disabled this?
If possible, reregister asp.net
Open Control Panel
Programs\Turn Windows Features on or off
Internet Information Services
World Wide Web Services
Application development Features
ASP.Net <-- check mark here
ref: How to register ASP.NET 2.0 to web server(IIS7)?
Try adding in pages section in web.config the following section:
<namespaces>
<add namespace="System.Web.SessionState" />
<namespaces/>

Resources