Introduction
Welcome to the ASP.NET Support Voice column! My name is Jerry Orman. I have been with Microsoft over 5 years, and have spent most of my time focused on Web-related technologies such as Microsoft FrontPage and the new Microsoft SharePoint technologies. I have spent the last year working with Microsoft ASP.NET as a support engineer.
This month in the Support Voice column, I am going to describe creating and opening ASP.NET projects in Microsoft Visual Studio .NET.
While troubleshooting an issue in which I am unable to
open or create ASP.NET-based projects, I've found that it is very important to
understand what Visual Studio .NET is doing in the background to help isolate
the issue. As you'll see below, this process has multiple steps and is very
dependent on Microsoft Internet Information Services (IIS) functioning correctly on the back end. I will include the error
messages and dialog boxes you will see along the way as well as
recommended steps to narrow down the problem.
File path versus FrontPage Server Extensions
In Microsoft Visual Studio .NET
2003, there are two methods for creating and opening Web sites. One method uses
a file path to copy files, and the other method uses Microsoft FrontPage Server
Extensions. Each method has pros and cons. Below is a table outlining the
differences.
FrontPage Server ExtensionsPro | Con |
Remotely administer and manipulate a Web site over
HTTP. If you have multiple URLs that you work against, this method is
preferable.
Visual Studio .NET creates the folder and files, and sets the
application settings in IIS by sending Web Extender Client (WEC) based RPC
calls to the FrontPage Server Extensions over HTTP. - Admin help for FrontPage Server Extensions:Don't need to be an admin on the computer you are
administering. You need to be an Administrator in FrontPage Server Extensions
permissions, which allows you to manage and manipulate the contents of that
FrontPage Server Extensions extended site, while preventing you from actually
making operating system-level changes. | FrontPage Server Extensions sets NTFS permissions
when configured.
Adds folders starting with _vti to manage the
content.
Troubleshooting FrontPage Server Extensions and
problems related to them can be difficult. |
File pathPro | Con |
Typically easier to configure.
Uses a file share to connect to the remote server. By
default, this path is . You can install
Remote Components to set up the share or manually create it.
Uses SMB to create the folder and copy the
files. | Need to be able to connect to a UNC path for this to
work. Will not work over HTTP.
Account running Visual Studio .NET needs to be an
admin on the remote computer because this method uses ADSI to set the application root in
IIS.
If authoring against multiple URLs, you will need to
keep up with all the shares. |
Changing the method used to create projects
By default, Visual Studio .NET uses the file share method. If you
want to always use the FrontPage Server Extensions method by default, you can change
this setting by following the steps below:
- Start Visual Studio .NET 2003.
- On the Tools menu, click
Options.
- Expand Projects.
- Click Web Settings.
- Click FrontPage Extensions.
Note The option for Repair links when Web files are moved or
renamed can be left unchecked. FrontPage Server Extensions can update
hyperlinks to resources if you move a file to a subfolder. - Click OK.
Creating an ASP.NET project
When you create a project, the behavior is similar regardless
of the method you use. In general, the following will occur:
- A folder is created to hold the application and is marked as an
application in IIS.
- The version of the framework is verified.
- Whether files can be copied and browsed from the URL
provided is verified.
- Template files are copied to the site.
A folder is created and marked as an application
When using the file share method, a folder is created at the UNC path
.
If you are working locally, the IDE will get the local path for the Web site
from the IIS metabase and uses the local path instead of the UNC path. The
folder is then marked as an application in IIS by using ADSI. This process
requires you to be an administrator on the computer you are creating the project
on. If you don't have access to the share or the share does not exist, you
will get the following message:
When you get this message, you should
try to open the UNC path in Microsoft Windows and confirm that your account can access
the share and create a folder. If you can get to the share, but the folder
cannot be marked as an application because you are not an administrator, you
will see the following message:

You will get this message even if the
folder is already marked as an application in IIS. This is because your user
account does not have enough privileges to check the application setting in
IIS. If you want to develop as a non-administrator, an administrator will need
to create the folder that will host your application and set the folder as an
application in IIS. When using the FrontPage Server Extensions method, this
entire process is done by using WEC. This is the same technology that Microsoft Visual
Interdev 6.0 and the FrontPage client use to connect to and manipulate Web
sites. The folder is created and marked as an application by sending RPC calls
through HTTP POST requests to the FrontPage Server Extension DLLs. If you do not have permissions to use the FrontPage Server Extensions, you will get prompted to
log in:
If your login fails, you will get the following
failure message:
Regardless of which method you use, if you
selected a project name that already exists, you will see the following dialog
box allowing you to change the project name:
The version of the framework is verified
Once the IDE creates the folder, it verifies that the correct
version of the framework is configured. This is done by sending a request for the
get_aspx_ver.aspx file. The path of the request will be
applicationPath/get_aspx_ver.aspx. This file doesn't exist and the IDE is
expecting the ASP.NET 404 message to be returned. The IDE uses this error page
to get the version number listed at the bottom. In this case the version is
1.1.4322.2300. This is the version for the Microsoft .NET Framework 1.1, which is included with
Microsoft Windows Server 2003 Service Pack 1 (SP1).
If this page is not returned, you get the
following message stating that the .NET Framework 1.1 was not detected:
The
most common causes for the 404 page not being returned are that some component is redirecting the request for
get_aspx_ver.aspx, a custom error page is configured in the Machine.config file,
ASP.NET is not configured in the IIS Mappings, or ASP.NET is prohibited in
the IIS Web Service Extensions if you are using IIS 6.0.
Check the IIS
Mappings:
- Open Internet Information Services Manager.
- Right-click the Web site you are creating the project
against, and then click Properties.
- Click the Home Directory tab.
- Under Application Settings, click
Configure.
- On the Application Mappings tab, make sure that
.aspx is listed and that it is pointing to the Aspnet_isapi.dll file.
- If the mapping is missing, run aspnet_regiis
-I from the framework folder:
%windir%\Microsoft.NET\Framework\v1.1.4322
Make sure that ASP.NET is enabled (only applies for IIS 6.0):
- Open Internet Information Services Manager.
- Select Web Service Extensions
Folder.
- Right-click ASP.NET v1.1.4322, select
Allowed.
Note If
ASP.NET v1.1.4322 is missing, run
aspnet_regiis
-I from the framework folder:
%windir%\Microsoft.NET\Framework\v1.1.4322
If
there is an error getting to the page, you will get an error stating an HTTP
exception similar to the following:
When you see this type of error, you want
to create an empty text file and name it test.aspx in the site and then try to
browse. If that fails or throws an error, you need to troubleshoot browsing
.aspx pages from the Web server. You will not be able to create a project if you
can't browse an .aspx page.
Tip A 403 response in this
scenario is typically caused by
Execute Permissions
being set to
None or
Read being unchecked.
- Open Internet Information Services Manager.
- Right-click the Web site you are creating the project
against, and then click Properties.
- Click the Home Directory tab.
- Make sure that the Read permission is
checked.
- Make sure that the Execute permission is set to
Scripts Only.
The vs-####_tmp.htm file
Once the folder is created and the version of the framework is
confirmed, the IDE copies an .htm file to the folder. The file is then browsed
using the URL used to create the site. This is done to ensure that the folder
the IDE is using can be browsed using the URL. The file will have a name similar
to vs11062107329733631_tmp.htm. The number will always be different. When the
IDE requests the file, it has to be the EXACT same file as was copied into the
directory. If something intercepts the request and modifies the output or the
page is not returned, you will see the following dialog box. The same dialog box is
returned whether you are using FrontPage Server Extensions or file share. The
only difference is the option that is selected.
Once you get
this dialog box, make a note of the file share, the URL, and the details
of the error. In this case, the file share is
,
the URL is
http://remoteserver/webapplication1,
and the error is an HTTP 404 error. If you look in the IIS log after getting
this error, you will see something similar to: 16:21:25
127.0.0.1 GET /WebApplication1/vs11062107329733631_tmp.htm 404 The
404 is a File Not Found response code. This code indicates that once the IDE made
the request using the URL, the file didn't exist. Typically, this problem is due to the
share path not pointing to the location that the IIS Web server is using to
serve content. The next step is to copy a test HTML file into the share
listed in the error and browse the file using the URL. If this fails, you need to
investigate the permissions on the share and check the properties for your IIS
Web site that maps to the URL to make sure that the local path matches the folder that
is shared.
Check the file path IIS is using:
- Open Internet Information Services Manager.
- Right-click the Web site you are creating the project
against, and then click Properties.
- Click the Home Directory tab.
- The local path is the location the application folder
should be created in.
Copy template files into the site folder
Once all the above checks are completed, the template files are
copied into the folder and displayed in Solution Explorer. If you are using
FrontPage Server Extensions to create the site, you will see the following
dialog box while this occurs:
Troubleshooting creating ASP.NET applications
Now that we can see how dependent this process is on IIS and the
configuration being a specific way, the first place you'll want to check is the
IIS logs. Along with the above dialog boxes and information, this will help you to
determine which step isn't working. The IIS logs are in the following location:
%windir%\system32\logfiles\w3svc#
Note # is the IIS Instance number of the Web site.
Tip You
can also go to
Start, click
Run, and type
LogFiles to get to the default log file
directory.
You can get the path by checking the IIS Properties:
- Open Internet Information Services Manager.
- Right-click the Web site you are creating projects against,
and then click Properties.
- On the Web Site tab, click
Properties under Enable Logging.
- The Log File Path and
Directory are listed at the bottom of the General
Properties tab.
When you are looking at the log file, it's good to know what
they should look like when the process works. The following are examples of
creating a project using both the file share and FrontPage Server Extensions.
I've added comments in the log to show the items you're after.
As mentioned above, if you don't get the expected response code, you will see
the dialog boxes displayed above.
#Software: Microsoft Internet Information Services 6.0
#Version: 1.0
#Date: 2005-08-30 20:35:33
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status
The GET request for get_aspx_ver.aspx - notice the response is a 404 File Not Found. This is the expected response.
2005-08-30 20:35:33 65.53.73.163 GET /supportvoice3/get_aspx_ver.aspx - 80 - 65.53.75.132 Microsoft-Visual-Studio.NET/7.10.3077 404 0 0
Here is the GET request for the vs###_tmp.htm file. The expected response for this is a 200.
2005-08-30 20:35:33 65.53.73.163 GET /supportvoice3/vs158849317529732258_tmp.htm - 80 - 65.53.75.132 Microsoft-Visual-Studio.NET/7.10.3077 200 0 0
These are requests for FrontPage Server Extensions files. Even though you specified file share mode, if the FrontPage Server Extensions are on the site, the IDE will still look for them and try to use them if possible. On this site, the FrontPage Server Extensions are not configured, so all these requests return 404 messages. You won't see anything related to the actual project files because they are all copied over SMB, which is not handled by IIS.
2005-08-30 20:35:33 65.53.73.163 GET /_vti_inf.html - 80 - 65.53.75.132 Mozilla/2.0+(compatible;+MS+FrontPage+4.0) 404 0 2
2005-08-30 20:35:33 65.53.73.163 POST /supportvoice3/_vti_bin/shtml.exe/_vti_rpc - 80 - 65.53.75.132 MSFrontPage/4.0 404 0 3
2005-08-30 20:35:33 65.53.73.163 GET /_vti_inf.html - 80 - 65.53.75.132 Mozilla/2.0+(compatible;+MS+FrontPage+4.0) 404 0 2
2005-08-30 20:35:33 65.53.73.163 POST /_vti_bin/shtml.exe/_vti_rpc - 80 - 65.53.75.132 MSFrontPage/4.0 404 0 3
2005-08-30 20:35:33 65.53.73.163 GET /_vti_inf.html - 80 - 65.53.75.132 Mozilla/2.0+(compatible;+MS+FrontPage+4.0) 404 0 2
2005-08-30 20:35:33 65.53.73.163 POST /_vti_bin/shtml.exe/_vti_rpc - 80 - 65.53.75.132 MSFrontPage/4.0 404 0 3
2005-08-30 20:35:33 65.53.73.163 GET /_vti_inf.html - 80 - 65.53.75.132 Mozilla/2.0+(compatible;+MS+FrontPage+4.0) 404 0 2
2005-08-30 20:35:33 65.53.73.163 POST /_vti_bin/shtml.exe/_vti_rpc - 80 - 65.53.75.132 MSFrontPage/4.0 404 0 3
2005-08-30 20:35:33 65.53.73.163 GET /supportvoice3/get_aspx_ver.aspx - 80 - 65.53.75.132 Microsoft-Visual-Studio.NET/7.10.3077 404 0 0
Now that we've seen what an IIS log looks like for a successful
project creation using the file share mode, let's take a look at a log using
FrontPage Server Extensions to create the project. I've again added some
comments to help out:
#Software: Microsoft Internet Information Services 6.0
#Version: 1.0
#Date: 2005-08-30 20:42:40
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status
The GET request for get_aspx_ver.aspx - notice the response is a 404 File Not Found. This is the expected response.
2005-08-30 20:42:40 65.53.73.163 GET /supportvoice/get_aspx_ver.aspx - 9999 - 65.53.75.132 Microsoft-Visual-Studio.NET/7.10.3077 404 0 0
Here is the GET request for the vs###_tmp.htm file. The expected response for this is a 200.
2005-08-30 20:42:52 65.53.73.163 GET /supportvoice/vs168727587929732259_tmp.htm - 9999 - 65.53.75.132 Microsoft-Visual-Studio.NET/7.10.3077 200 0 0
You'll now see requests looking for the author.dll file. This first request looks for the file in a _vti_bin folder inside the application folder. This is for backward compatibility. The file was moved into the _vti_bin folder in the root of the Web site as of the 2000 version of the FrontPage Server Extensions.
2005-08-30 20:42:52 65.53.73.163 POST /supportvoice/_vti_bin/_vti_aut/author.dll - 9999 - 65.53.75.132 MSFrontPage/4.0 404 0 3
Now the IDE is looking in the _vti_bin folder in the root of the Web site. The IDE finds the shtml.dll file (it returned a 200), so the IDE starts sending POST requests to the author.dll file to copy the files for the ASP.NET project to the Web site. You can run a network monitor trace and look in the body of the POST to author.dll to see the FrontPage RPC calls that are made.
2005-08-30 20:42:52 65.53.73.163 POST /_vti_bin/shtml.dll/_vti_rpc - 9999 - 65.53.75.132 MSFrontPage/4.0 200 0 0
2005-08-30 20:42:52 65.53.73.163 POST /_vti_bin/_vti_aut/author.dll - 9999 - 65.53.75.132 MSFrontPage/4.0 200 5 0
2005-08-30 20:42:52 65.53.73.163 POST /_vti_bin/_vti_aut/author.dll - 9999 - 65.53.75.132 MSFrontPage/4.0 401 1 0
2005-08-30 20:42:54 65.53.73.163 POST /_vti_bin/_vti_aut/author.dll - 9999 DOMAIN\user 65.53.75.132 MSFrontPage/4.0 200 0 0
2005-08-30 20:42:54 65.53.73.163 POST /_vti_bin/_vti_adm/admin.dll - 9999 - 65.53.75.132 MSFrontPage/4.0 200 5 0
2005-08-30 20:42:54 65.53.73.163 POST /_vti_bin/_vti_adm/admin.dll - 9999 - 65.53.75.132 MSFrontPage/4.0 401 1 0
Opening existing projects
When opening projects in the Visual Studio .NET IDE, you get two
options on the
File menu,
Open Project and
Open Project From Web. If you want to open the project using
the file share method, you use
Open Project. If you want to
use FrontPage Server Extensions, you use
Open Project From
Web.
Open Project
When you select
Open Project, the
Open Project dialog box opens and
you navigate to the .vbproj or .csproj file associated with your ASP.NET
application. When you open the project file, the IDE uses the .webinfo file
located in the same folder to match the file path you selected with the URL
listed in the .webinfo file.
The .webinfo file contains the following
information pointing to the project file by using a URL:
<VisualStudioUNCWeb>
<Web URLPath = "http://<RemoteServer>/SupportVoice/SupportVoice.csproj" />
</VisualStudioUNCWeb>
The URL listed is the URL specified when the project was first
created. The validation done here is the same as that used to create a new project.
Visual Studio .NET copies a file to the file path you used to open the project
named vs###_tmp.htm and then browses the file using the URL in the .webinfo
file. In this case, if the request to the .htm file fails, you will get the
following message:
Unable to open Web project
'SupportVoice'. The file path '\\server\share\supportvoice' does not correspond
to the URL 'http://server/wrongpath'. The two need to map to the same server
location. HTTP Error 404: Not Found
Notice the URL is
/wrongpath and
not
/supportvoice. This indicates the .webinfo has the incorrect
URL.
The IIS log will show the following entry: 2005-08-30 20:48:12 65.53.73.163 GET
/wrongpath/vs59855858329732260_tmp.htm - 9999 - 65.53.75.132
Microsoft-Visual-Studio.NET/7.10.3077 404 0 3If you need to
troubleshoot opening a project using file share, the following IIS log shows
what the process looks like when it works. I've again added some comments to
help you out:
#Software: Microsoft Internet Information Services 6.0
#Version: 1.0
#Date: 2005-08-30 20:33:49
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status
GET for the vs###_tmp.htm. The response is a 200, which is the correct response. If you have any other response, you need to check the .webinfo file and make sure that the file path you used for the project file matches the URL in the .webinfo file.
2005-08-30 20:33:49 65.53.73.163 GET /SupportVoice/vs51193067529732258_tmp.htm - 80 - 65.53.75.132 Microsoft-Visual-Studio.NET/7.10.3077 200 0 0
Requests looking for FrontPage Server Extensions to see if they are configured. Notice that these are all 404 File Not Found in this case.
2005-08-30 20:33:49 65.53.73.163 GET /_vti_inf.html - 80 - 65.53.75.132 Mozilla/2.0+(compatible;+MS+FrontPage+4.0) 404 0 2
2005-08-30 20:33:49 65.53.73.163 POST /SupportVoice/_vti_bin/shtml.exe/_vti_rpc - 80 - 65.53.75.132 MSFrontPage/4.0 404 0 3
2005-08-30 20:33:49 65.53.73.163 GET /_vti_inf.html - 80 - 65.53.75.132 Mozilla/2.0+(compatible;+MS+FrontPage+4.0) 404 0 2
2005-08-30 20:33:49 65.53.73.163 POST /_vti_bin/shtml.exe/_vti_rpc - 80 - 65.53.75.132 MSFrontPage/4.0 404 0 3
GET request for the get_aspx_ver.aspx page. The expected response is a 404.
2005-08-30 20:33:52 65.53.73.163 GET /SupportVoice/get_aspx_ver.aspx - 80 - 65.53.75.132 Microsoft-Visual-Studio.NET/7.10.3077 404 0 0
Open Project From Web
If you select
Open Project From Web, you are using FrontPage
Server Extensions. This method does not use the file path and is done
completely over HTTP. From the beginning, you'll notice that you are asked for
the URL of the site instead of the file path of the project file. This
method also does not use the .webinfo file because the IDE does not need to validate
that the file share is the same as the Web site.
Once you
enter a URL and click
OK, the client uses WEC to display a list of the
applications on the server. This list is obtained by using FrontPage RPC calls to
the server. The dialog box should look like the following:
You
can double-click the application you want to open and then double-click the
project file to open the project:
If the server does not have
FrontPage Server Extensions, you will get directed to your My Document
folder:
You could potentially also see an empty Web site like
the following:
The empty
Open Project dialog box can occur when
the Web server returns a header stating that the server supports Distributed Authoring and Versioning
(DAV) instead of the headers for WEC. By
default, Directory Browsing is not allowed in IIS. So when the client makes the
DAV request to the folder, IIS does not return the list of files. You can
work around this problem by enabling Directory Browsing on the content so that
DAV will list the contents. Another option is to use the solutions in the
following Microsoft Knowledge Base article:
304133 Errors appear if you use an Office XP program to save content
The following IIS log shows the IDE opening a project
by using FrontPage Server Extensions. Notice there is not a request for
the get_aspx_ver.aspx file or for the vs###_tmp.htm file. All the requests are being sent through
the DLLs in the _vti_bin folder.
#Software: Microsoft Internet Information Services 6.0
#Version: 1.0
#Date: 2005-08-30 20:44:41
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status
2005-08-30 20:44:41 65.53.73.163 OPTIONS / - 9999 - 65.53.75.132 Microsoft+Data+Access+Internet+Publishing+Provider+Protocol+Discovery 200 0 0
2005-08-30 20:44:41 65.53.73.163 GET /_vti_inf.html - 9999 - 65.53.75.132 Mozilla/4.0+(compatible;+MS+FrontPage+6.0) 200 0 0
2005-08-30 20:44:41 65.53.73.163 POST /_vti_bin/shtml.dll/_vti_rpc - 9999 - 65.53.75.132 MSFrontPage/6.0 200 0 0
2005-08-30 20:44:41 65.53.73.163 POST /_vti_bin/_vti_aut/author.dll - 9999 - 65.53.75.132 MSFrontPage/6.0 200 5 0
2005-08-30 20:44:41 65.53.73.163 POST /_vti_bin/_vti_aut/author.dll - 9999 - 65.53.75.132 MSFrontPage/6.0 401 1 0
2005-08-30 20:44:42 65.53.73.163 POST /_vti_bin/_vti_aut/author.dll - 9999 DOMAIN\user 65.53.75.132 MSFrontPage/6.0 200 0 0
2005-08-30 20:44:42 65.53.73.163 OPTIONS / - 9999 - 65.53.75.132 Microsoft+Data+Access+Internet+Publishing+Provider+Protocol+Discovery 200 0 0
2005-08-30 20:44:42 65.53.73.163 POST /_vti_bin/_vti_aut/author.dll - 9999 - 65.53.75.132 MSFrontPage/6.0 401 1 0
2005-08-30 20:44:42 65.53.73.163 POST /_vti_bin/_vti_aut/author.dll - 9999 DOMAIN\user 65.53.75.132 MSFrontPage/6.0 200 0 0
2005-08-30 20:44:46 65.53.73.163 OPTIONS / - 9999 - 65.53.75.132 Microsoft+Data+Access+Internet+Publishing+Provider+Protocol+Discovery 200 0 0
2005-08-30 20:44:46 65.53.73.163 OPTIONS /supportvoice - 9999 - 65.53.75.132 Microsoft+Data+Access+Internet+Publishing+Provider+Protocol+Discovery 200 0 0
2005-08-30 20:44:46 65.53.73.163 POST /supportvoice/_vti_bin/_vti_aut/author.dll - 9999 - 65.53.75.132 MSFrontPage/6.0 200 5 0
2005-08-30 20:44:46 65.53.73.163 POST /supportvoice/_vti_bin/_vti_aut/author.dll - 9999 - 65.53.75.132 MSFrontPage/6.0 401 1 0
2005-08-30 20:44:46 65.53.73.163 POST /supportvoice/_vti_bin/_vti_aut/author.dll - 9999 DOMAIN\user 65.53.75.132 MSFrontPage/6.0 200 0 0
2005-08-30 20:44:46 65.53.73.163 POST /supportvoice/_vti_bin/_vti_aut/author.dll - 9999 - 65.53.75.132 MSFrontPage/6.0 401 1 0
2005-08-30 20:44:46 65.53.73.163 POST /supportvoice/_vti_bin/_vti_aut/author.dll - 9999 DOMAIN\user 65.53.75.132 MSFrontPage/6.0 200 0 0
Does any of this change for Visual Studio .NET 2005?
There are some changes to how Microsoft Visual Studio .NET 2005 will
interact with Web projects. The main difference is that there is not a project
file and there is not a dependency on IIS. Developers will be able to create
Web applications on their hard disk. When the developers browse or debug the
applications from the IDE, a small Web server is started on a unique port to
serve the requests.
The following link contains a lot of information
about Web projects in the upcoming Visual Studio .NET 2005
release: