Solved

Migrate web sites from IIS6 to IIS8

Posted on 2014-09-10
6
1,865 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
  • 3
  • 2
6 Comments
 
LVL 32

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 26

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
Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

 
LVL 32

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

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

Debug Tools to analyse IIS process: This article focus on taking memory dumps from IIS to determine which code is taking more time and to analyse which calls hangs/causes more CPU usage. To take dumps,download the following. Install1: To st…
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…
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

705 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

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now