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 Extensions
Pro | 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. |
Pro | Con |
Typically easier to configure. Uses a file share to connect to the remote server. By default, this path is \\server\wwwroot$. 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 \\server\wwwroot$\application. 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
- Open Internet Information Services Manager.
- Select Web Service Extensions Folder.
- Right-click ASP.NET v1.1.4322, select Allowed.
%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: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
\\remoteserver\c$\inetpub\supportsite,
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.
#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
#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>
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
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 3
If 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: