Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2273
  • Last Modified:

Migrate web sites from IIS6 to IIS8

I am attempting to migrate several websites from a Win 2003 X86 system running IIS6 to  Win 2012 R2 X64 system running IIS8.  At this point in time I am only concerned with running ALL websites in classic ASP mode.  I believe I have all of the correct roles/features installed in order to support classic mode.

I have migrated six sites over to the new 2012 server and I have only one working so far.  Switching between Classic 2.0 and 4.0 modes produces several different errors on various sites.  

-Error 500
-Error 403 Access forbidden
-Could not load file or assembly 'App_Browsers' or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.

I have experimented with "WebDeploy" using a ZIP package, but it doesn't appear to resolve any of the various errors I am receiving (Noted above).  I also tried a tool called "IMET" from the MS IIS.net website and creates the website/AppPools etc, but still produces the same set of errors (Noted above)

Has anyone had success with migrating websites between IIS6 and IIS8 (Classic mode)?  Any tips are truly appreciated.
0
dhrhelp
Asked:
dhrhelp
  • 3
  • 2
1 Solution
 
Big MontySenior Web Developer / CEO of ExchangeTree.org Commented:
Make sure whatever user your app pool runs under had access to your site. If you're using the default app pool then you need to set up access for NETWORK SERVICES.

You may also want to turn off friendly errors so you can get more info on what's falling. To do that, go under the ASP module in iis and look for something along the lines of "send errors to client"
0
 
dhrhelpAuthor Commented:
Thanks for the quick response.

I have changed the AppPool to use "Network Service" and edited the basic settings of the site to use "Application Pass-thru Authentication".  I have explicitly applied NTFS permissions for the "Network Service" group to the root of the IIS directory where the websites resides with modify permissions. Enabled ASP parent paths as well.

By turning off friendly errors, do you mean enabling ASP - > Debugging Properties -> Send Errors to Browser?  If so, this is set to "true".  

Below is one of the specific errors I am getting .  To note, the original IIS6 site was set to ASP4.0, however I am attempting to run the site in ASP 2.0 Classic with IIS8.  Changing to 4.0 classic produces an "500 - Internal server error"
Event code: 3008
Event message: A configuration error has occurred.
Event time: 9/10/2014 8:31:09 PM
Event time (UTC): 9/11/2014 12:31:09 AM
Event ID: a36f0d8f2f594ebe9268ef10cae0af88
Event sequence: 10
Event occurrence: 3
Event detail code: 0
 
Application information:
    Application domain: /LM/W3SVC/6/ROOT-6-130548686698784425
    Trust level: Full
    Application Virtual Path: /
    Application Path: E:\Websites\WEBSITENAME\
    Machine name: SERVER1
 
Process information:
    Process ID: 4624
    Process name: w3wp.exe
    Account name: NT AUTHORITY\NETWORK SERVICE
 
Exception information:
    Exception type: ConfigurationErrorsException
    Exception message: Could not load file or assembly 'App_Browsers' or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.
 
Request information:
    Request URL: http://websitename/form.aspx 
    Request path: / form.aspx
    User host address: 10.1.1.1
    User:  
    Is authenticated: False
    Authentication Type:  
    Thread account name: NT AUTHORITY\NETWORK SERVICE
 
Thread information:
    Thread ID: 8
    Thread account name: NT AUTHORITY\NETWORK SERVICE
    Is impersonating: True
    Stack trace:    at System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective)
   at System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory()
   at System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai)
   at System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig)
   at System.Web.Compilation.WebDirectoryBatchCompiler..ctor(VirtualDirectory vdir)
   at System.Web.Compilation.BuildManager.BatchCompileWebDirectoryInternal(VirtualDirectory vdir, Boolean ignoreErrors)
   at System.Web.Compilation.BuildManager.BatchCompileWebDirectory(VirtualDirectory vdir, VirtualPath virtualDir, Boolean ignoreErrors)
   at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath)
   at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
   at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
   at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean noAssert)
   at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp, Boolean noAssert)
   at System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
   at System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2.GetHandler(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
   at System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig)
   at System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
0
 
Dan McFaddenSystems EngineerCommented:
I seems that you need to install newer Visual Studio runtime DLLs.  What version of VS was the app built with?


Exception information:
     Exception type: ConfigurationErrorsException
     Exception message: Could not load file or assembly 'App_Browsers' or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.


If you don't know, you could just install the latest VS2005, VS2008 and VS2010 runtimes.

Dan
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
Big MontySenior Web Developer / CEO of ExchangeTree.org Commented:
sorry for the delay, I've been sick as a dog these last few days and haven't been on the computer much...

what version of the .NET Framework do you have installed? you may need to just double click on the application pool and then change the .NET Framework to the version you have installed, or install the version you have selected.
0
 
dhrhelpAuthor Commented:
Apologies for my delay.  I figured this out.  Since IIS 8 uses global tags in the root web.config for these references, each website web.config were treating them as duplicates.

<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                        <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                              <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
                              <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                              <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                              <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/></sectionGroup></sectionGroup></sectionGroup></configSections>
0
 
dhrhelpAuthor Commented:
Trial and error lead me to believe this was the solution since it was happening to multiple websites that had the exact same issue.
0

Featured Post

Nothing ever in the clear!

This technical paper will help you implement VMware’s VM encryption as well as implement Veeam encryption which together will achieve the nothing ever in the clear goal. If a bad guy steals VMs, backups or traffic they get nothing.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now