问题
We are receiving a problem whereby every time we copy a dll to the bin directory, our main domain on the website grinds to a halt and the only way to bring it back up is by restarting the "WWW Publishing Service".
We run a website which contains a number of IIS applications running off a single server where each of these applications are configured to run off different application pools.
We have a large codebase which contains over 280 aspx pages across the site. Our main domain contains about 100 aspx pages whilst the subdomains contain 15 or 20 each.
When we do a build we are currently generating a bunch of dlls which we manually copy into the production servers bin directory. As soon as we do this the IIS obviously kicks off a recycle compiling each of the aspx pages and code behinds. At this point, the site essentially grinds to a halt (sometimes it needs to be restarted - by restarting the web publishing service - to wake it up again).
The curious thing is, this only happens when we deploy to the main domain IIS application, i.e. the www. If we deploy a bin file to the sub domain in the same way, it almost instantly works.
Even if I do an iisreset.exe, this does not seem to resolve the problem.
Few Questions:
- Is there anyway of speeding up the current process so that we do not have to restart the server?
- Would there be any obvious code changes or updates which would be causing the need for a restart of the service (sometimes we run an iisreset but this doesnt seem to bring it back to life)?
Some specs:
- Code is written in : C#
- .net framework : 2.0
- Server : Windows Web Server 2008
- iis version : IIS7
- Database : MSSQL 2008 Standard
Any assistance would be appreciated. Thanks in advance.
回答1:
When you put an app_offline.htm
file in the wwwroot of your main domain the IIS site goes offline. This is default behavior of IIS as Scott Gu described. When you do this all dlls can be safely overwritten. And when you delete the app_offline.htm
file your application will be start up the next time a request comes.
Read more about app_offline.htm
here and here.
Basically, if you place a file with this name in the root of a web application directory, ASP.NET 2.0 will shut-down the application, unload the application domain from the server, and stop processing any new incoming requests for that application. ASP.NET will also then respond to all requests for dynamic pages in the application by sending back the content of the app_offline.htm file (for example: you might want to have a “site under construction” or “down for maintenance” message).
This provides a convenient way to take down your application while you are making big changes or copying in lots of new page functionality (and you want to avoid the annoying problem of people hitting and activating your site in the middle of a content update). It can also be a useful way to immediately unlock and unload a SQL Express or Access database whose .mdf or .mdb data files are residing in the /app_data directory.
Once you remove the app_offline.htm file, the next request into the application will cause ASP.NET to load the application and app-domain again, and life will continue along as normal.
回答2:
As far as i know, it is not necessary to do iisreset when you add a dll to the bin folder. The dll should be loaded automatically from the bin.
You should do iisreset when you add a new dll to the global assembly cache.
回答3:
Can you stop that website in IIS while your are copying the dlls and then start it again? Because it will not halt other websites hosted in same IIS.
来源:https://stackoverflow.com/questions/6196672/asp-net-c-sharp-requires-iis-restart-when-new-dll-copied-to-bin-directory