Solved

Migrate web sites from IIS6 to IIS8

Posted on 2014-09-10
6
2,051 Views
Last Modified: 2014-10-01
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
Comment
Question by:dhrhelp
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
6 Comments
 
LVL 33

Expert Comment

by:Big Monty
ID: 40315872
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
 

Author Comment

by:dhrhelp
ID: 40316053
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
 
LVL 28

Expert Comment

by:Dan McFadden
ID: 40322879
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
Simplifying Server Workload Migrations

This use case outlines the migration challenges that organizations face and how the Acronis AnyData Engine supports physical-to-physical (P2P), physical-to-virtual (P2V), virtual to physical (V2P), and cross-virtual (V2V) migration scenarios to address these challenges.

 
LVL 33

Expert Comment

by:Big Monty
ID: 40324155
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
 

Accepted Solution

by:
dhrhelp earned 0 total points
ID: 40347093
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
 

Author Closing Comment

by:dhrhelp
ID: 40354142
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

Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Running powershell scripts from ASP.NET 6 83
Windows 2003 Web server - authentication required message 3 48
Passing ASP variables in JQuery 4 52
Services disabled 1 29
When it comes to showing a 404 error page to your visitors, you do not want that generic page to show, and you especially do not want your hosting provider’s ad error page to show either. In this article, I will show you how to enable the custom 40…
A phishing scam that claims a recipient’s credit card details have been “suspended” is the latest trend in spoof emails.
This video shows how to use Hyena, from SystemTools Software, to update 100 user accounts from an external text file. View in 1080p for best video quality.

734 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question