Reputation: 28867
This problem has several of us stumped in the office. We are all new to deploying ASP.NET apps to a web farm, and I am fresh out of ideas.
We have a web farm, and the application is copied on to all of them. However, we are having a problem..
An exception is being thrown when trying to get settings from appSettings
. Upon further investigation, it turns out the node is actually not using the local Web.Config
but it falling back to the Web.Config
in the .NET framework folder (we have proved this by adding keys there, which appear on a test page).
I must be missing something, because my understanding is that so long as the file is there, IIS should use that! One of the servers seems to work fine!
Here's a list of what we have confirmed:
However, at run-time the file that is used is the global one (windows\ms .net\framework\v2\config\web.config
).
Anyone have any suggestions as to what may be going wrong? Appreciate all the help I can get!
Thanks.
Rob
Upvotes: 1
Views: 4528
Reputation: 28867
First off, thank you very much to the guys that answered, I do appreciate the help!
Just an update on this issue. It was a tough one!
Turns out, there was nothing wrong with the code, or the configuration.
It appears that something weird was going on with the server farm (which I have absolutely no control over or access to). The sysadmin re-built the farm, re-deployed the solution and all worked fine.
I guess we will never know what was wrong, but at least we know it was not a development issue!
Thanks again, Rob
Upvotes: 0
Reputation: 104040
From what you tell in the comments, I suggest going with "Try and Error".
What happens, if you insert an erroneous entry by purpose? Does the application fail or doesn't that affect anything?
Try to copy the content and then delete and recreate that file from scratch.
Upvotes: 0
Reputation: 104040
This is the hierarchy for ASP.NET configuration. Maybe this could help understanding which settings overwrite each other.
Machine.config: The Machine.config file contains the ASP.NET schema for all of the Web applications on the server. This file is at the top of the configuration merge hierarchy.
Web.config: The Web.config file for the server is stored in the same directory as the Machine.config file and contains default values for most of the system.web configuration sections. At run time, this file is merged second from the top in the configuration hierarchy.
Web.config: The Web.config file for a specific Web site contains settings that apply to the Web site and inherit downward through all of the ASP.NET applications and subdirectories of the site.
Web.config: The Web.config file for a specific ASP.NET application is located in the root directory of the application and contains settings that apply to the Web application and inherit downward through all of the subdirectories in its branch.
Web.config: The Web.config file for an application subdirectory contains settings that apply to this subdirectory and inherit downward through all of the subdirectories in its branch.
ApplicationName.config: The ApplicationName.config file contains settings for a Windows client application (not a Web application).
Understanding which ASP.NET files and folders are inherited through folders and applications is very important for development and troubleshooting.
Here is a short summary:
So, this means that anything set in the root web.config file will inherit down the entire site, even if some folders are marked as applications.
Where this gets messy is if the web.config file has references to assemblies but sub-applications don't have those assemblies. For example, let's say that you have a HTTP Module configured in the root of the site and referenced from the site web.config file. If you have a sub-application called /subfolder which is marked as an application, then /subfolder will attempt to load the HTTP Handler from /subfolder/bin. Since it doesn't exist, an error will be thrown.
There are multiple ways around this. Probably the cleanest if the HTTP Handler isn't needed in /subfolder is by 'removing' the reference by adding a clause in the /subfolder/web.config file. You can do this with . Here is an example of how to remove a HTTP Module in a subfolder:
<httpModules>
<remove name="ErrorLog"/>
</httpModules>
Here is what the site web.config might look like:
<httpModules>
<add name="ErrorLog" type="GotDotNet.Elmah.ErrorLogModule, GotDotNet.Elmah, Version=1.0.5527.0, Culture=neutral, PublicKeyToken=978d5e1bd64b33e5" />
</httpModules>print("code sample");
Upvotes: 6