In the course of IIS7 development, the team and I have answered an infinity of questions about IIS7 on any possible topic imaginable.Ironically, neither I nor anyone else I know on the team has ever answered the most basic question – what is the minimum set of steps necessary to get a website running with IIS7?
This post answers this exact question, and explains the key IIS7 concepts of sites, applications, and virtual directories (vdirs), which must be created before your IIS7 server can serve a single request.
Update: We recently launched a service that significantly helps you understand, troubleshoot, and improve IIS and ASP.NET web applications. If you regularly troubleshoot IIS errors, manage Windows Servers, or tune ASP.NET performance, definitely check out the demo at www.leansentry.com.
It also provides the steps necessary to create IIS7 sites, applications, and virtual directories, and options for configuring them.
If you are familiar with IIS6, read on to learn about critical differences in the way sites, apps, and vdirs work on IIS7, and how to create and manage them using IIS7 tools.
If you don’t care about the background, and just want to know how to create your first IIS7 website in the quickest way possible, jump ahead.Then, come back and read about what it all means …
So, what’s the deal with sites, applications, and virtual directories?
Before you can serve a single request from your IIS7 server, you need to create a set of configuration that describes how the server listens for requests, and how these requests are then dispatched to your scripts or static files.To do this, you need to at minimum create a site, an application, a virtual directory, and an application pool, which together provide the basic configuration necessary to serve your website (to be fair, the default configuration of the server already includes a set of these that you can use right away – more on that later).
A site is the top-level logical container that specifies how http requests are received and processed – it defines a group of bindings that determine how the site listens for incoming requests, and contains the definitions of applications/virtual directories that partition the site’s url namespace for the purposes of structuring your application content.
A binding is a combination of protocol name and protocol-specific binding information.While IIS7supports multi-protocol bindings (WCF’s soap-tcp, FTP, etc), we will focus on the http path only here.So, for our purposes an http binding effectively defines an http endpoint that listens on:
·A specific interface ip address (or all interfaces)
·A specific port number
·A specific http host header (or all host headers)
This way, you can configure many sites on your server that listen on different ip addresses, different ports, or on the same ip address / port but with different host headers.
It’s important to note that the url of the request has no part in determining which site the request is routed to – only the bindings do.All requests received on a binding are sent to the site that owns the binding, so effectively each site owns its own full url namespace starting with “/”.
This url namespace is then partitioned further into applications, and then further yet by virtual directories.
An application is a logical container of your website’s functionality, allowing you to divide your site’s url namespace into separate parts and control the runtime behavior of each part individually.For example, each application can be configured to be in a separate application pool, thereby isolating it from other applications by putting it in a separate process, and optionally making that process run with a different Windows identity to sandbox it.The application is also the level at which ASP.NET applications / appdomains are created.
Each application has a virtual path that matches the initial segment of the url’s absolute path for the requests to that application.A request is routed to the application with the longest matching virtual path.
– Each site must have at least the root application with the virtual path of “/”, so any requests not matching other applications in the site will be routed to the root application.
Finally, a virtual directory maps a part of the application url namespace to a physical location on disk.When a request is routed to the application, it uses the same algorithm to find the virtual directory with the longest virtual path matching the remainder of the request’s absolute path after the application path.
– Again, each application must have at least the root virtual directory with the virtual path of “/” to be functional.
For example, here is how a request to /app1/dir1/file.txt may be routed based on site layout:
Site layout |
Request routing |
“/” APP |
“/” APP, “/” VDIR |
“/” APP |
“/app1” APP, “/” VDIR |
“/” APP “/” VDIR |
“/” APP, “/app1/dir1” VDIR |
Let’s look at an example:
In this example, I have two sites:The default IIS7 site named “Default Web Site”, and another site named “MySite”.
“Default Web Site” site has a single binding enabling it to receive requests on port 80 of all interfaces, with no specific host header specified.The “MySite” site also listens on port 80 of all interfaces, but it only receives requests that specify “mysite” in the host header.The ability to host multiple sites on a single port using host headers is critical for mass hosting scenarios,and is enabled by the http.sys kernel driver that performs low level request management on IIS’s behalf.
A request to http://domain.com/test/hello.aspxwith host: domain is received on port 80, and is dispatched to “Default Web Site”.Then, its routed to the root application, and the root virtual directory within it, and the physical path of the file served for this request becomes c:inetpubmysitetesthello.aspx.
A request to http://mysite.com/ with host: mysite is received on port 80, and is dispatched to“MySite” because it matches the host header specified by “MySite”’s binding.As before, it is routed to the root application, and its root virtual directory, with the physical path being c:mysite, a directory.
Finally, a request to http://mysite.com/test/hello.aspx with host:mysite is received on port 80, and is again dispatched to “MySite”.It is routed to the root “/” application, but within that application, it is routed to the “/test” virtual directory, because the http://mysite.com/test part of the url matches the virtual directory’s path.So, the physical path of the file served becomes c:inetpubtesthello.aspx.
What’s an application pool?
An application pool is technically not a part of the site / application / virtual directory containment hierarchy, but it is an important part of configuring the server to be able to serve requests to the application.
An application pool defines the settings for a worker process that will host one or more IIS7 applications, carrying out their request processing.The application pool is a unit of process isolation, since all request processing for an application runs within its application pool’s worker processes.It is also a unit of isolation from a security perspective since the application pool can run with a different identity, and ACL all needed resources exclusively for itself to prevent applications in other application pools from being able to access its resources.
The application pool mechanism has been introduced in IIS6, and has been a key strategy in supporting IIS6’s stellar security record.In IIS7, it has been further enhanced to offer improved isolation and scalability – I will cover strategies of using application pools efficiently in a future post soon.
So, how do I create a simple IIS7 site?
To summarize what we learned from before, a functioning website is one that has at least the following:
1.A site
2.A binding that determines on which interface, port, and hostheader the site listens on.
3.A root application
4.A root virtual directory mapping the root application to its physical root folder
5.An application pool to run the application
The good news is that IIS7 by default comes with the aptly named “Default Web Site” already configured, so if you are ok with a website on port 80 that listens for all host headers, and a single application located at the root, you can just start using it without having to create anything.Just drop your files in %systemdrive%inetpubwwwroot, and hit up http://localhost/.
Given that, why would you want to create a separate website / application / etc?Here are some of the reasons:
1.You want to have multiple websites (different domain names, or ports).
2.You want to have multiple applications to isolate part of your website for reliability, or security reasons by placing them in separate application pools.Or, you need to have separate ASP.NET applications.
3.You want to redirect parts of your website’s url namespace to a different location on disk by creating a virtual directory.
Let’s start with the simplest case- creating a new website from scratch.This post will show how to do these tasks from the command line, but you can do most of these from the new IIS7 Admin tool.The command line is a more flexible way to do it, and lends itself well to automation with cool batch scripts I know you will write.
So, without further ado, let’s create a completely new website using the IIS7’s AppCmd.Exe command line tool, located in %windir%system32inetsrv.Be sure to do this as an Administrator from an elevated command line prompt – Start > Programs > right click on Command Line Prompt, and choose Run as Administrator):
> %windir%system32inetsrvAppCmd ADD SITE /name:MyNewSite /id:3 /bindings:http/*:81: /physicalPath:c:inetpubmynewsite
SITE object “MyNewSite” added
APP object “MyNewSite/” added
VDIR object “MyNewSite/” added
This creates a new website named “MyNewSite”, with id = 3, and creates a single HTTP binding configured to listen on all interfaces, port 81, without a host-header restriction.Note that a root application, and root virtual directory are automatically created.This is because I specified the optional /physicalPath parameter – which results in the root application with a root virtual directory pointing to the specified physical path to be created.At this point, you can immediately begin using the website by placing files in c:inetpubmynewsite, and access the site with http://localhost:81/.
What about the application pool?By default, all applications use the “DefaultAppPool”, a default application pool that also hosts the “Default Web Site”’s application.You can create a new application pool / place the application in a different application pool later if you want.
Going deeper with site, application, and virtual directory creation
Ok, so now we have a simple website we just created.Let’s examine it with the AppCmd List Sites command:
> %windir%system32inetsrvAppCmd LIST SITES
SITE “Default Web Site” (id:1,bindings:http/*:80:,state:Started)
SITE “MyNewSite” (id:3,bindings:http/*:81:,state:Started)
This displays the default and the new site we created, including their ids, their bindings, and their state.The state is a runtime property of the site, and indicates whether the site is currently receiving requests.If there is an error in the site’s definition, for example, another site has a conflicting binding, or the site is missing some required configuration, the state will be “Stopped”.A state of “Started” is a good indication that the site is functional.
You probably noticed earlier that the site binding was specified with the /bindings parameter as “http/*:81:”, which looks like a mangled url.This is the binding syntax used by AppCmd, which allows multiple bindings to be specified in a list of comma-separated PROTOCOL/BINDINGINFORMATION entries, like:
http/192.168.1.1:80:,http/*:81:mysite
This syntax allows bindings to be specified for any protocol, where the PROTOCOL is the protocol name, and BINDINGINFORMATION is a string passed to the listener adapter for this protocol to construct the binding.For HTTP, the binding information string is the following:
[interface-ip-list or * ]:port:[hostheader]
The interface-ip-list is a comma separated list of ipv4 interface addresses on which the binding listens, and * can also be used to mean all ip addresses.The hostheader specifies the request host header value that requests must specify to match this binding, and empty means all host headers.
We also used /id parameter to specify the id for the new site.If you are creating a lot of sites and don’t know which ids are available, you can have the tool assign the next available id by omitting this parameter.
There are times when you do not want to create a root application / virtual directory together with site creation, especially if you require other settings to be set on them – such as specifying the application pool to which the application should belong.In this case, we can create the site, application, and virtual directories separately as follows:
> %windir%system32inetsrvAppCmd ADD SITE /name:MyOtherSite /bindings:http/*:82:
SITE object “MyOtherSite” added
> %windir%system32inetsrvAppCmd ADD APP /site.name:MyOtherSIte /path:/ /applicationPool:MyNewAppPool
APP object “MyOtherSite/” added
I specified the mandatory site name when creating the application, the virtual path, and also optionally set the application pool name for this application.Notice that here you can also use the /physicalPath parameter to force automatic root virtual directory creation.
Now, let’s also create the application pool.For application pools, only the name is required, but you can also set a multitude of application pool configuration settings including identity, recycling settings, etc.
>%windir%system32inetsrvAppCmd ADD APPPOOL /name:MyNewAppPool
APPPOOL object “MyNewAppPool” added
Finally, let’s create the root virtual directory for the application:
> %windir%system32inetsrvAppCmd ADD VDIR /app.name:MyOtherSite/ /path:/ /physicalPath:c:inetpubmyothersite
VDIR object “MyOtherSite/” added
At this point, we should have a functional site with a root application, and virtual directory.Lets inspect these:
> %windir%system32inetsrvAppCmd LIST SITES
SITE “Default Web Site” (id:1,bindings:http/*:80:,state:Started)
SITE “MyNewSite” (id:3,bindings:http/*:81:,state:Started)
SITE “MyOtherSite” (id:4,bindings:http/*:82:,state:Started)
> %windir%system32inetsrvAppCmd LIST APPS
APP “Default Web Site/” (applicationPool:DefaultAppPool)
APP “MyNewSite/” (applicationPool:DefaultAppPool)
APP “MyOtherSite/” (applicationPool:MyNewAppPool)
Notice that our root app for the MyOtherSIte site we just created is in the MyNewAppPool application pool, as we intended.
> %windir%system32inetsrvAppCmd LIST VDIRS
VDIR “Default Web Site/” (physicalPath:%SystemDrive%inetpubwwwroot)
VDIR “MyNewSite/” (physicalPath:c:inetpubmynewsite)
VDIR “MyOtherSite/” (physicalPath:c:inetpubmyothersite)
You will notice that each object has a quoted string right after the object type.This is the unique identifier of the object, which for sites is the site name, for applications is the application config path (site name + virtual path of the application), and for virtual directories is the virtual directory config path ( parent app path + virtual directory path).These identifiers can be used to reference these objects for other operations, such as SET, DELETE, etc.
Finally, during the creation of any of these objects with the ADD command, you can set any of the other configuration properties associated with that object. You can also set them afterwards using the SET command.You can obtain the settable properties for each object, such as below for a site object:
> %windir%system32inetsrvAppCmd SET SITE “Default Web Site” /?
-name
-id
-serverAutoStart
-limits.maxBandwidth
-limits.maxConnections
-limits.connectionTimeout
-logFile.logExtFileFlags
-logFile.customLogPluginClsid
-logFile.logFormat
-logFile.directory
-logFile.period
-logFile.truncateSize
-logFile.localTimeRollover
-logFile.enabled
-traceFailedRequestsLogging.enabled
-traceFailedRequestsLogging.directory
…
For example, to disable logging for a site, you can do:
> %windir%system32inetsrvAppCmd SET SITE “Default Web Site” /logFile.enabled:false
The site object in particular has a lot of different settings that can be set.For more information on how to set these settings, including collection settings, see http://www.iis.net/articles/view.aspx/IIS7/Use-IIS7-Administration-Tools/Using-the-Command-Line/Getting-Started-with-AppCmd-exe?Page=4.
You can also get more help and examples from the tool itself – for example:
APPCMD SITE /? Displays the commands supported by the SITE object
APPCMD LIST SITE /? Displays the help and examples for using the LIST SITE command
The topic of managing sites, applications, virtual directories and application pools is extensive, and so it’s hard to cover everything.I hope I got the bases covered, but if you are confused about anything or want more information on any specific issue, please leave a comment.I hope to be able to tune this post to include the stuff you need to know.
Thanks,
Mike
Anonymous
PingBack from http://mvolo.com/blogs/serverside/archive/2007/07/12/Creating-IIS7-sites_2C00_-applications_2C00_-and-virtual-directories.aspx
Anonymous
In the course of IIS7 development, the team and I have answered an infinity of questions about IIS7 on
Anonymous
In the course of IIS7 development, the team and I have answered an infinity of questions about IIS7 on
Anonymous
In the course of IIS7 development, the team and I have answered an infinity of questions about IIS7 on
Anonymous
摘要本期共有8篇文章:VS2008对嵌套母板页面提供支持我的JSON编辑器理解ASP.NET2.0中的压缩和解压缩使用微软Silverlight创建Web页面VisualStud…
Anonymous
If you have worked with IIS6 and previous versions of IIS, you are most likely familiar with the IIS
Anonymous
Dear sir,
I cannot see the default website in Windows Vista Business edition . using IIS7.I install iis7 from control panel.I enabled the Administer acct. as well.pls. reply ,
my email: [email protected]
Thanks,
Mike Volodarsky
Shabbir,
That doesnt sound right. Can you try reinstalling IIS? Be sure to install the webserver itself, not just Windows Process Activation components.
Execute “%windir%system32inetsrvAppCmd LIST SITES” from an elevated command prompt to see the sites on your machine. If you reinstall and are still not able to see “Default Web Site”, let me know.
Thanks,
Mike
Anonymous
Dear Mike,
I have a problem with Default Web Site. Right-click on it, in the list I can not find Properity.
Could you please help me on this?
Thanks
Demao
Anonymous
Dear Mike,
Sorry I forgot to tell you my OS. OS: Vista Home Pri.
Thanks
Demao
Anonymous
My conn string works with IIS5. Am using ASP with MS Access Database. When I migrated to IIS7, it doest work anymore.
It says:
Microsoft JET Database Engine error ‘80004005’
Unspecified error
Here’s my old code:
Set db = Server.CreateObject(“adodb.connection”)
db.Mode = adModeReadWrite
db.Open(“provider=microsoft.jet.oledb.4.0;data source=” & Server.MapPath(“foldername/databs.mdb”))
Pls update me and show changes if possible. Thanks
Mike Volodarsky
Demao,
I am not sure what you are asking 🙂 Where do you right click on the “default web site”, and what “Properity” are you looking for? What is your operating system?
Thanks,
Mike
Mike Volodarsky
Mars,
This post is not the right place for this question, but you can find your answer here: http://blogs.iis.net/bills/archive/2007/05/21/tips-for-classic-asp-developers-on-iis7.aspx.
Thanks,
Mike
Anonymous
I prepared a post showing how to add new website from the Internet Information Services Manager instead of using the IIS7’s AppCmd.Exe command line tool.
You may read the post by clicking the following link:
http://www.bloggingdeveloper.com/post/Creating-IIS7-sites-applications-and-virtual-directories-using-Internet-Information-Services-Manager.aspx
Cheers,
Blogging Developer
Anonymous
Dear Mike,
Thanks for your reply. My OS is vista home premium. Two problems with using IIS.
1. I am trying to do “Right-click on the Default Web Site and select properties” as shown in A, but I can not find properties in the list.
2. Open IIS Manager as shown in B, but I can not find “Web Extensions folder “.
Are they not available in vista how premium? Could you please give me a help on this?
Thanks
Demao
A:
Verify that ASP .Net v2.0.50727 is set for the Default Web Site.
1. Open the IIS Manager.
2. Expand the Web Sites folder
3. Right-click on the Default Web Site and select properties.
4. Go to the ASP .Net tab. (Note: this tab will not exist if ASP .Net 2.0 isn‟t installed.)
5. Make sure that ASP .Net v2.0.50727 is selected in the drop-down list.
B:
Enable ASP .Net v2.0.50727 in the IIS Web Extensions
1. Open IIS Manager.
2. Select the Web Extensions folder in the right pane.
3. Set ASP .Net v2.0.50727 to “Allowed”.
Anonymous
IIS7 provides quite a few ways to create websites, applications, and application pools. The simplest
Mike Volodarsky
Demao,
It took me a while to understand what you are referring to (since it didnt come from this post). The steps you are providing apply to the old IIS6 inetmgr.exe, not the new Admin tool that comes on Vista.
To learn more about the new Admin tool, see http://www.iis.net/default.aspx?tabid=7&subtabid=73.
Thanks,
Mike
Anonymous
This seems really simple, but I can’t get it to work. I’ve created my new website in IIS and updates the HOSTS file as instructed at http://devlicio.us/blogs/ziemowit_skowronski/archive/2007/03/01/multiple-sites-and-host-headers-on-localhost-with-iis7.aspx,
and yet nothing happens – internet explorer hangs for a bit, and says ‘cannot display the webpage’.
Also, if I comment out the references to localhost in the HOSTS file, nothing happens – localhost continues to function in the browser.
Do you have any ideas as to why? Restarting IIS didn’t make the changes come about.
Anonymous
ah – it wasn’t saving! I need to be an administrator in Vista I guess.
It’s working now.
Anonymous
The IIS 7 configuration system contains 50+ configuration sections (100+ if you count .NET Framework
Anonymous
Dear Mike,
I came accross this blog and I think I can get help here.
OS: Windows vista ultimate
language: ASP (not .NET)
Database: MS Access
I successfully installed IIS and added a virtual directory not located in wwwroot. I can ran the first page (page1) which is not connected to any database. When I load the page2 (which is connected to a database), I havethe HTTP 500 error. I turn the “Show friendly HTTP error messages” off and now I get “An error occurred on the server when processing the URL. Please contact the system administrator”.
I google the “error” and find this “%windir%serviceprofilesnetworkserviceAppDataLocalTemp” and “cscript %systemdrive%inetpubadminiscriptsadsutil.vbs set w3svc/AspScriptErrorSentToBrowser true”. Both of them did not solve my problem. Can you help me?
Physical directory: C:>myweb (add as virtual directory and contains myweb files)
Connexion string
<% Set conn=Server.createObject("ADODB.connection") connstring="DRIVER={Microsoft Access Driver (*.mdb)}; " & "DBQ=" & Server.MapPath("/myweb/database") & "/myusers.mdb" conn.open connstring,"","" %>.
Thanks,
Benjamin ([email protected])
Anonymous
HowtoRunASP.NETv1.1onIIS7:http://www.iis.net/articles/view.aspx/IIS7/Hosting-Web-Applications/…
Mike Volodarsky
Benjamin,
It sounds like an ASP application error. ASP does not send detail error responses by default in IIS 7.0. To see the error details, you can do:
> %windir%system32inetsrvappcmd set config /section:asp /scriptErrorSentToBrowser:true
Be sure to turn it back to false on the production server.
Thanks,
Mike
Anonymous
Hi, I did a foolish thing and deleted default website before i found your tutorial, is there a way around it?
Anonymous
Good article. I really like the new flexability just wish there was not so much need to relearn the same things in different ways.
Anonymous
摘要
本期共有8篇文章: VS2008对嵌套母板页面提供支持
我的JSON编辑器
理解ASP.NET2.0中的压缩和解压缩
使用微软Silverlight创建Web页面
…
Anonymous
Mike, thanks for the article. I’m a ColdFusion developer and needed a ‘quick-start’ guide for setting up my local development environment in IIS7 vs. the built-in CF Server. Thanks to you, I was finally able to mirror my production environment. Much appreciated.
Anonymous
Was an interesting read but keen to see same examples done in powershell…any chance you can demonstrate these or post URL to location where more information can be found on them? I found this one http://blogs.iis.net/tobintitus/archive/2006/11/30/powershell-and-microsoft-web-administration.aspx
Anonymous
Hi,
I have been searching online for help on how to configure IIS 7.0 for development environment. So far this article is the best in terms of understanding the configuration part. I have configured the older IIS fairly simply but for the life of me, I cannot configure IIS 7.0 to run my application on my laptop. I have Vista Ultimate with IIS 7.0. I cannot even get http://localhost/ to work and get a simple HTML file to show in the Explorer. I am completely clueless on what is it that I am missing. Please help something like IIS 7.0 for dummies 😀
Anonymous
Hi Mike. I read your article, which is very good but still can’t make the website work. I’ve made a .net website in vs2005, which has a few dll’s that are needed to run. Also I need to give some directories write permission. I don’t know how to give executing permission for the dll’s too. I’m using windows vista home premium and all IIS options are installed. I can reach the website, can access localhost and open and navigate through the pages, but the dll’s are not working, because the site is not executing any of it’s functionality.
Anonymous
I’ve created a site in vista ulitmate, but it does not appear to be an applciation. I used the GUI to do this. I could run the commands you list earlier, and that would probably work for me, but I want to know, why can i not simply convert an existing site, into an app? If i try to add an app, it requests a url for it, and thus the full url to the app would be http://www.mysite.com/myapp, instead of http://www.mysite.com.
does that make sense? I just want to understand what I’ve not done correctly, although i can see that i can fix it by doing the above.
Any ideas?
thanks
Mike Volodarsky
Hi Moody,
Check out http://mvolo.com/blogs/serverside/archive/2007/07/26/Troubleshoot-IIS7-errors-like-a-pro.aspx for a good way to get started troubleshooting IIS 7.0.
Thanks,
Mike
Mike Volodarsky
Hi juliano,
I am guessing the DLLs in question are .NET assemblies containing your modules/handlers/ASP.NET classes. If so, just simply giving IIS_IUSRS read access to your application directory and below should allow them to be used.
If you are experiencing issues, please use http://mvolo.com/blogs/serverside/archive/2007/07/26/Troubleshoot-IIS7-errors-like-a-pro.aspx to determine the error you are having, and then post to http://forums.iis.net for additional help.
Thanks,
Mike
Mike Volodarsky
nme,
The root of each web site (assuming you created it correctly) is already an application. You only need to create additional applications if you wanted to create separate child applications that are separate from the root application in your site. For example, if you wanted to have http://www.mysite.com/myapp to be its own application from http://www.mysite.com.
Thanks,
Mike
Anonymous
Hi Mike !
I am using Vista Business. I’m trying to connect to an Access 2003 Database using ASP with IIS7, and keep getting the message :
An error occurred on the server when processing the URL. Please contact the system administrator.
What should I do to connect?
Thanks
Addie
Mike Volodarsky
Hi Addie,
You need to turn on detailed ASP errors to see what the exact issue is. See this link for more info: http://blogs.iis.net/bills/archive/2007/05/21/tips-for-classic-asp-developers-on-iis7.aspx.
Most likely, you are running into the user profile issue, which is also described in the link above.
Thanks,
Mike
Anonymous
Thanks for your reply.
However, I cannot access the IIS Manager – tried reading Windows online help: it's not in my Administrative tools, and running 'inetmgr' didn't do anything too. I'm getting lost here… can you please direct me? All I want is to get this thing going…
Thanks
Addie
Mike Volodarsky
It sounds like you don’t have IIS installed. Install it from Start > Programs > Turn Windows Features On and Off …
Then, inetmgr should be accessible from your Start menu.
Thanks,
Mike
Anonymous
I am trying to run a webpage created using ASP CLASSIC /vista iis7/ Ms Access – but keep receiving error : An error occurred on the server when processing the URL. Please contact the system administrator.
This project works fine in WinXP Pro / iis5.1 and was transferred straight to c:inetpubwwwroot…. format – but Vista is not allowing anything except simple static .asp pages to be run.
All setup as stated on your site and several other help forums have been followed… but i cannot process any dynamic asp page. Please can you help ….
Kind regards!
Anonymous
Just found this page through google, and wanted to say thanks, its a very clear and concise introduction to IIS7 and Sitesapp poolsBindings.
As a non Web Dev or as someone with the basics in IIS, I found it very helpful.
Keep up the good work.
Anonymous
I have been using then inetmgr to work on this websight(http://grhanch.googlepages.com/) before I post it. The question I have is how do I change the security setting(write enabled) such that a asp counter could be added. Please show me a direction to follow.
Anonymous
How to solve this error?
Configuration Error
Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.
Parser Error Message: It is an error to use a section registered as allowDefinition=’MachineToApplication’ beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.
Source Error:
Line 2:
Line 6:
Line 3:
Line 4:
Line 5:
Anonymous
Mike, I love IIS 7 and have several sites hosted with it. I recently installed Exchange 07 and am using the new OWA (it’s great). However I would like to be able to access it using “mail.mydomain.com” instead of “mydomain.com/owa” I have not seen how I can do this in IIS 7. There is a very simple way in IIS 6 by creating a new site giving it the correct host header, and then pointing to a url instead of physical location; however I see now way to do this in IIS 7. Thank you in advance for any help you can provide.
Mike Volodarsky
Hi Sam,
You can do this with IIS 7.0, using a similar process to what you describe for IIS 6.0. The easiest way to do this is by using the “IIS Manager” tool (inetmgr.exe):
– Create a new site (point site root to the physical location of the OWA files)
– Set the hostheader on the site binding
There is no built-in way (in IIS 6.0 or IIS 7.0) to make a site that proxies requests to another URL. So, you always have to point it to a physical folder with your application files.
Let me know if this doesnt answer your question.
Thanks,
Mike
Anonymous
I have already tried that and it does not work for owa, I get an error stating that Exchange canot intialize. Are there some special steps for owa 07. Is there no longer functionality in IIS 7 to simply point to a url as opposed to a physical directory?
Anonymous
I am writing program in VC++ 2005 (MFC 8.0) with Unicode support to
administrate IIS 7.0
My requirements are
1. Browse all available web sites including default web site
2. Create virtual directory
3. Create application pool
4. Set appropriate DOT net version
Where do I get some sample code in VC++ 2005?
Sample code in VB Script using WMI is also appreciated.
Mike Volodarsky
Toms,
Use the IDispath wrapper over the Ahadmin COM objects, by using:
#import “c:windowssystem32inetsrvnativerd.dll”
This will give you a friendly _com_ptr wrapper over the Ahadmin COM objects. More docs on Ahadmin: http://msdn.microsoft.com/en-us/library/aa965217.aspx
However, if possible, you should use the .NET Microsoft.Web.Administratiaon interface for rapid development. Or, you can also use the Ahadmin IDispatch interface from script, as shown here: http://blogs.iis.net/ksingla/archive/2007/02/25/using-ahadmin-to-read-write-iis-configuration-part-1.aspx
Thanks,
Mike
Anonymous
I have a Virtual Directory created with c# with the installer, but in IIS 7.0 I need to “Convert to Application” and then select an application Pool as “Classic .Net AppPool”
(Windows Server 2008).
Is it possible to do it with the Appcmd??
Just to modify my VDIR and add this option??
thanks
Anonymous
I am a student doing web project. I have Vista Ultimate, and when I create IIS website using IIS manager, and a folder at C:MyWebsite and I get authentification : path thru, but warning on physical path C:MyWebSitewebsite is not verified. When I open visual studio and open existing website, Iam getting message that project is not IIS. When I open default page and tested, I get server ‘/’ in Application. further error saying, it may not be confiuared as IIS. What document I shoud read to resolve this issu>
Thanks.
Phil
Anonymous
I am a student doing web project. I have Vista Ultimate, and when I create IIS website using IIS manager, and a folder at C:MyWebsite and I get authentification : path thru, but warning on physical path C:MyWebSitewebsite is not verified. When I open visual studio and open existing website, Iam getting message that project is not IIS. When I open default page and tested, I get server ‘/’ in Application. further error saying, it may not be confiuared as IIS. What document I shoud read to resolve this issu>
Thanks.
Phil
Anonymous
Hello Mike,
Glad to see your blog here. I installed the Windows Web Server 2008 since last week but until now I could not make the sites run PHP successfully.
I installed PHP in ISAPI mode and added to the ApplicationPool when I run PHP in DefaultWebsite http://localhost/ it processes normally. But when I created the domains using Righ Clicking on SITES in IIS Manager mapping the physical part to the appropriate directory under c:Inetpubwwwrootdomain.com
and tested by typing http://www.domain.com/test.php
the script did not process but display as normal HTML.
Your recommendation in this will be appreciated. Thank you.
Anonymous
Hi Mike,
Nice posting regarding IIS 7.0 setup.
I have an in-depth question: Can I set the ApplicatioHost’s handlers’ accessPolicy=”Read, Execute, Script” via the AppCmd.exe command line? If so, how? I am writing an installer for a product that uses SSRS, and Vista’s SP1 turns this setting to “Read” only. I need to ensure that scripts can be executed in the virtual directory.
Thanks,
Christopher Wright
Sr. Software Developer
cwright @ crev.us
Anonymous
hi,
i use IIS7 on my vista ultimate ,and place mywebservice in the C:inetpubwwwrootaspnet_client folder,and change the port to 8080,but when i use this address:
http://localhost:8080/aspnet_client/EBankServices/Service.asmx
i got this error:
http://localhost:8080/aspnet_client/EBankServices/Service.asmx
Line 26:
Source File: C:inetpubwwwrootaspnet_clientebankservicesweb.config Line: 26
could u help me plz?
Anonymous
Thanks for the article Mike. This helps alot and is the only good “getting started” type article I could find on IIS7. Hopefully this should solve my frustrations I had last night trying to set my site up on IIS7 🙂
Anonymous
How to delete a Virtual Diroctory from Windows Vista (IIS 7.0)..? Please help me…?
Anonymous
Hi Mike!
I have a simple question, but don’t get it working with your post, the book “Professional IIS 7 and ASp.NE Integrated Programming” from Wrox:
I have an ASP.NET application which should behave different depending on the host-header (meaning it fetches the host-header / server-name from the url and looks up the matching database record which defines the behavior). This must depend only on host-header information and not on path information. I need to set this up on my dev machine as well as on a production server (which at the moment is still Win Server 2003 with IIS 6, but there this configuration works). My Dev Machine is Vista x64 Business.
Here is what I need:
An ASP.NET application running at the site’s root with following urls:
http://mycompany.com/
http://de.mycompany.com/
http://yourcompany.com/
Can you give me an example how to configure this in IIS? When calling http://myconpany.com/ from my browser I get only an IIS default page linking to http://go.microsoft.com/fwlink/?linkid=66138&clcid=0x409.
I use the hosts file to omit DNS lookup for the hostnames and binding to locahost.
Mike Volodarsky
Marco,
The “Default Web Site” website has a default binding of *:80:, which means listen on port 80 on all unbound ip addresses ignoring the host header.
With this configuration, your ASP.NET application in the default web site will receive requests with all host headers that have a DNS record pointing to your server. It’s then up to you to process the request correctly based on the host header or the server name in the url.
If you created your own site, check its bindings, and make sure that it specifies no host header, and that there arent other sites on the same ip/port that have specific host-header bindings as those will steal requests for those host headers.
Hope this answers your question.
Mike
Anonymous
Hi Mike,
I have running IIS7 on a virtual machine (Vista x86) on a Vista x64 host. I want to set the document root folder to a physical drive outside the virtual machine so that I have easy access to the all files on the host system.
I have created a shared folder in the virtual machine which contains the server root.
System name of the host and virtual machine = the same.
Vista UAC= off on both machines.
I can not get it to work.
IIS7 manager problems:
Site Binding:
There was an error while performing this operation.
Filename:?S:wwwrootweb.config
Error: Cannot read configuration file
Test connection:
Authentication Pass-through authentication (DefaultAppPool:NetworkService) (Succeeded)
Authorization Cannot verify access to path (S:wwwroottestsite). (Failed)
How to configure?
Thanks in advance if you could help me out with this.
Anonymous
Mike,
thanks for your answer. Unfortunately this doesn’t really help. The Default Site has no host headers for HTTP binding, only for net.msmq and msmq.formatname (which is “localhost”) – I guess these are default settings because I didn’t change them. My site with specific host header doesn’t work with application and virtual directory at the site’s root, but it works well when the application path is anything else than “/”. And this is confusing me. App, and VDir set to “/” doesn’t work, App = “/someapp” and VDir = “/” works well.
Mike Volodarsky
@Marco,
This means the web workload is not installed. Once you do, you’ll get HTTP bindings. So far you just have the framework 3.5 bindings installed used by WCF applications.
You’ll need to get more specific with the errors you are seeing, check out http://mvolo.com/blogs/serverside/archive/2007/07/26/Troubleshoot-IIS7-errors-like-a-pro.aspx to get started. You can post these to forums.iis.net to get further help.
Thanks,
Mike
Mike Volodarsky
@John,
I recommend posting to forums.iis.net, they’ll help you with the investigation.
Thanks,
Mike
Anonymous
I am using Expression web to create a web.config file to secure pages in a folder. It works on my PC localhost as long as the folder is converted to a subweb. On my webserver it gives me the following error message:
Parser Error Message: It is an error to use a section registered as allowDefinition=’MachineToApplication’ beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.
Source Error:
Line 9:
Line 10:
Line 11:
Line 12:
Line 13: