Forms Authentication Error

  • Thread starter Brett Robichaud
  • Start date
B

Brett Robichaud

Is anyone familiar with this error? I have this running just fine on my
local machine but when I pushed it out to our development server I get this
error. I have no idea what it is saying. Any clues?

-Brett-

Server Error in '/' Application.
----------------------------------------------------------------------------
----

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 59: by Microsoft that offers a single logon and core profile
services for member sites.
Line 60: -->
Line 61: <authentication mode="Forms">
Line 62: <forms
Line 63: name="MIB.Identity"


Source File: C:\Webs\CorpWeb\products\imagebridge\myimagebridge\web.config
Line: 61
 
P

Pete Beech

This line indicates one possible reason:
"This error can be caused by a virtual directory not being configured as an
application in IIS."

Web.config sections can be specified to only be allowed to be modified at
the application level, i.e. modified in the root folder of your web
applications boundaries on the server. The authentication section looks like
it is one of them. At the moment, the folder which contains the web.config
where you have configured this section is not the root folder of the web
application.

There's at least two explanations for this:
1) you have tried to configure this stuff in a subfolder of your web
applications root folder
2) the virtual directory containing your app has not been configured as an
IIS web application within IIS.

So, on your server, you need to go into IIS, then to the properties for this
folder, and make sure it has an application created on it. Or, configure
this section in the web.config which exists in the root folder of your app.

HTH,
Cheers,
Pete Beech
 
B

Brett Robichaud

Yes I do have this ASP App down in a subdir of the main web.

I actually already tried creating a virtual directory for my app after
seeing this error but it made no difference. I also tried copying the
web.config down to the root and it made no difference.

I'm curious why it is acting differently on this server than it is locally
on my machine? Is there some machine based policy that enforces this?

Optimally I would like to have my web.config in the subfolder. Is there a
way I can do this? I have full control of the server.

-Brett-
 
P

Pete Beech

Have you also created an application in that virtual directory? If you open
up the properties on the folder, in the application settings section of the
virtual directory tab, do you see a button saying Create, or one saying
Remove? If its Remove, you have an application there. (You can also tell by
the icon on the folder - its a kind of box with a globe in it if an
application has been created on the virtual directory.) .. apologies if I'm
telling you stuff you already know.

Mind you, if the app boundary is the main web, and the web.config still
wouldn't work at that level, I'm not sure if it has anything to do with what
I've said... Is your bin folder under the subdir of where the ASP.NET app
is, or directly under the main webs root folder?

Pete
 
B

Brett Robichaud

My virtual directory does indeed have an application setup. The bin folder
is in the subfolder along with my application.

After reading a little about this error I am more confused. Some people
think it isn't possible to enable forms authentication in a subfolder of the
root, others say you can.

I can't make it work. Seems crazy not to allow me to create a separate app
in a subfolder and secure it. I must be missing something obvious here...

-Brett-
 
P

Pete Beech

Well, thats very strange. Normally this works fine - what OS is on the
server? - I've only ever done it on a Windows 2000 box. Anyway, ASP.NET
certainly thinks that the web.config is in a subdir of the application, for
some reason, even though you're saying it is in the application's root
directory and that there is an application defined there. Maybe you could
try removing and recreating the application through IIS?

From the documentation about the <authentication> element, it states
"Configures ASP.NET authentication support. This element can be declared
only at the machine, site, or application level. Any attempt to declare it
in a configuration file at the subdirectory or page level will result in a
parser error message."

This doesn't apply to the <authorization> element, which can be defined at
any subfolder in the application's boundaries.

Pete
 
S

Steven Cheng[MSFT]

Hi Pete,

Since you've mentioned that the web application run well on the dev machine
but failed on the deployment server. I think the problem mainly due to the
deployment server's IIS site's virtual folder hierarchy. I've mentioned the
error info contains the folder struture of your develpment site as below:
C:\Webs\CorpWeb\products\imagebridge\myimagebridge\web.config

It's so deep that I suspect whether there is any virutal folder(at the
upper-level of your appliation) which has host a asp.net web application.
If so, your application will be consided as a sub folder of the upper level
asp.net web application. Also, you can try creating a new virutual folder
under the site's root folder and deployment the web application in that
virutal directory to see whether the problem remains.

In addition, would you provide me more detailed of your deployment site's
IIS folder info?
Just those vds within
"C:\Webs\CorpWeb\products\imagebridge\myimagebridge\web.config"
which are the upper-level of your web application and how are their
Directory setting in the IIS. Then, I can try generating some tests on my
side regarding on the issue. Thanks.


Regards,

Steven Cheng
Microsoft Online Support

Get Secure! www.microsoft.com/security
(This posting is provided "AS IS", with no warranties, and confers no
rights.)

Get Preview at ASP.NET whidbey
http://msdn.microsoft.com/asp.net/whidbey/default.aspx
 
R

Rick Spiewak

Try something like this in your web.config file - in my case, I use it to
disable the authentication requirement for a subfolder. (Also, make sure
that your subfolder is NOT configured as an application.)

<location path="Promotions">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>

(I have this just after the <appsettings> section in my case...)
 
B

Brett Robichaud

Ok here is what I have.

The root web on this server is located at C:\Webs\CorpWeb. In IIS this is
setup as the Web Site. This is all classic ASP code. Everything below this
directory is part of our web site.

My new ASP.NET app is located in
C:\Webs\CorpWeb\products\imagebridge\myimagebridge. This location is of
course a subfolder of the main web site. This is the only location of
ASP.NET code on our site as of today, so I have a web.config in that subdir.
On IIS I started with no virtual directory in this subdir. From other
advice I tried creating a virtual directory in this subfolder and made sure
it was setup as an app. It made no difference.

I guess I'm not familiar with how virtual directories work with regards to
ASP.NET, so bear with my ignorance here.

As an experiment I did create new subfolder off the main website named MIB
and made it a virtual directory. I copied all my ASP.NET code into that
folder and it seems to work ok. But this isn't really what I want. There
are a number of pages in our site that reference the ASP.NET code in the
original directory /products/imagebridge/myimagebridge. I can create
virtual directory in this location if necessary, but I need pages to be able
to reference it as the full path not the virtual directory name.

I think I've just confused myself even more. Maybe I need to go back to the
basics of ASP.NET and virtual directories. I think what has confused me is
that it all works fine on my local dev box with no virtual directories, just
the default web site.

-Brett-
 
P

Pete Beech

Hi Brett,
If you want to preserve the path, you don't need to create a virtual
directory at the point where the ASP.NET application code starts. As long as
it is under the main web, or another virtual directory, then thats no
problem. You just need to create the application at that point.

E.g. I just tested this by creating an ASP.NET app called WebApplication1
under the main web - [incidentally, since its in a direct subfolder of the
main web, it doesn't create a virtual directory (e.g. its in
C:\Inetpub\wwwroot\WebApplication1). But it does create an application
there*. However, all this would apply if WebApplication1 was a virtual
directory too]

Then I created a simple page, at C:\Inetpub\wwwroot\WebApplication1, which
does something on the server - a button which sets a label to some text, in
server side code. I ran that, using
http://localhost/WebApplication1/WebForm1.aspx , and made sure it worked.

Then I created a subfolder Sub1, then another under that, Sub2, and then
created a bin folder under Sub2. I copied the WebForm1.aspx, web.config into
Sub2, and the dll into Sub2\bin.

If I then go to http://localhost/WebApplication1/Sub1/Sub2/WebForm1.aspx, I
get the parser error you got, about web.config containing stuff that should
only be in the root folder. Fair enough, because it is just a subfolder of
the apps root folder.

So, in IIS, I can create an application on Sub2 (but not a virtual
directory), and I can access the same URL again, and everything works fine.
Sub2 contains a completely separate IIS/ASP.NET application, which you can
access with the full path.

The way I think of it is that this creating an application thing sets
application boundaries, so that the folder you create the application at,
and every subfolder under it which is not itself an application defines the
scope of that application. IIS and ASP.NET will treat all the folders making
up the application as one entity, and any access to pages in those folders
will share Session and Application objects, global.asax, etc, etc. I'm sure
thats over-simplified, but thats how I think of it.

HTH,
Pete

* You can tell if its created a virtual directory by looking at the
properties of the folder in IIS, and looking at the local path - if its
greyed out and just has a relative path in there (in this example,
\WebApplication1) then its not a virtual directory. If it is not greyed out,
and has a full path (say E:\MyOtherWebFolders\Webapp1) then it is a virtual
directory (also if the icon is a folder with a globe, and not just a folder
icon, its a virtual directory).
 
B

Brett Robichaud

Perfect! That is the golden answer I needed.

I simply created an application at the path I wanted and it now works
perfectly.

This also clarifies for me why it worked locally and not on the server.
Locally I had used VS.Net to create the app for me and had no idea that it
actually went into IIS and set that directory up as an application (the
problem with Wizards!).

Thank you so much for the help. You undoubtedly saved me much head-banging
and fumbling around. And less work for myself this weekend. Now I can go
enjoy the fabulous weather here in the Northwest.

-Brett-

Pete Beech said:
Hi Brett,
If you want to preserve the path, you don't need to create a virtual
directory at the point where the ASP.NET application code starts. As long as
it is under the main web, or another virtual directory, then thats no
problem. You just need to create the application at that point.

E.g. I just tested this by creating an ASP.NET app called WebApplication1
under the main web - [incidentally, since its in a direct subfolder of the
main web, it doesn't create a virtual directory (e.g. its in
C:\Inetpub\wwwroot\WebApplication1). But it does create an application
there*. However, all this would apply if WebApplication1 was a virtual
directory too]

Then I created a simple page, at C:\Inetpub\wwwroot\WebApplication1, which
does something on the server - a button which sets a label to some text, in
server side code. I ran that, using
http://localhost/WebApplication1/WebForm1.aspx , and made sure it worked.

Then I created a subfolder Sub1, then another under that, Sub2, and then
created a bin folder under Sub2. I copied the WebForm1.aspx, web.config into
Sub2, and the dll into Sub2\bin.

If I then go to http://localhost/WebApplication1/Sub1/Sub2/WebForm1.aspx, I
get the parser error you got, about web.config containing stuff that should
only be in the root folder. Fair enough, because it is just a subfolder of
the apps root folder.

So, in IIS, I can create an application on Sub2 (but not a virtual
directory), and I can access the same URL again, and everything works fine.
Sub2 contains a completely separate IIS/ASP.NET application, which you can
access with the full path.

The way I think of it is that this creating an application thing sets
application boundaries, so that the folder you create the application at,
and every subfolder under it which is not itself an application defines the
scope of that application. IIS and ASP.NET will treat all the folders making
up the application as one entity, and any access to pages in those folders
will share Session and Application objects, global.asax, etc, etc. I'm sure
thats over-simplified, but thats how I think of it.

HTH,
Pete

* You can tell if its created a virtual directory by looking at the
properties of the folder in IIS, and looking at the local path - if its
greyed out and just has a relative path in there (in this example,
\WebApplication1) then its not a virtual directory. If it is not greyed out,
and has a full path (say E:\MyOtherWebFolders\Webapp1) then it is a virtual
directory (also if the icon is a folder with a globe, and not just a folder
icon, its a virtual directory).

Brett Robichaud said:
Ok here is what I have.

The root web on this server is located at C:\Webs\CorpWeb. In IIS this is
setup as the Web Site. This is all classic ASP code. Everything below this
directory is part of our web site.

My new ASP.NET app is located in
C:\Webs\CorpWeb\products\imagebridge\myimagebridge. This location is of
course a subfolder of the main web site. This is the only location of
ASP.NET code on our site as of today, so I have a web.config in that subdir.
On IIS I started with no virtual directory in this subdir. From other
advice I tried creating a virtual directory in this subfolder and made sure
it was setup as an app. It made no difference.

I guess I'm not familiar with how virtual directories work with regards to
ASP.NET, so bear with my ignorance here.

As an experiment I did create new subfolder off the main website named MIB
and made it a virtual directory. I copied all my ASP.NET code into that
folder and it seems to work ok. But this isn't really what I want. There
are a number of pages in our site that reference the ASP.NET code in the
original directory /products/imagebridge/myimagebridge. I can create
virtual directory in this location if necessary, but I need pages to be able
to reference it as the full path not the virtual directory name.

I think I've just confused myself even more. Maybe I need to go back to the
basics of ASP.NET and virtual directories. I think what has confused me is
that it all works fine on my local dev box with no virtual directories, just
the default web site.

-Brett-

mentioned
the
 
S

Steven Cheng[MSFT]

Thanks a lot for Pete's excellent solution.

Hi Brett,

I'm very glad that you've resolved the problem. I've consulted some further
experts on IIS and confirm some concepts on the IIS virutal folder and a
certain folder created as application. Here are some additional infos:
1. A Virtual Directory:
Generally we can create a virtual directory at any position of a website's
folder hierarchy. For example, create one under the site's root or create
one under another virutal diretory or even create one under another normal
folder in the site's folder hierarchy. Then we can access the virtual
folder(the pages or resources in it) via its virtual url( its parent
folder's url + the vitual folder's name). Such virutal folder can host
normal static web resources or classic ASP web pages. But not able to host
ASP.NET application.

2. create a folder and set it as an "Application" via its properties in
IIS setting. In fact , when we set a folder( in the site's folder
hierarchy) as "application", the IIS will automatically set it as a Virutal
Directory. In other word, it is just like we create a virutal folder with
the same name of this folder under its parent folder. Such folder(created
as application) can host asp.net web application. Also the session states
and application stats are separated from their parent web applications( in
the folder which at higher level). For example, if we have the following
hierarchy:

site root/
webapp1/ ' this is a asp.net web application(virutal folder
and created as applcation)
sub1/ 'normal folder
sub2/ 'normal folder


if we create a new normal folder under sub2, suppose it is named "sub3".
Then it's unable to run asp.net application in it. After we set the "sub3"
as a "application" , its ok to run asp.net web application. However, at the
time we set it as a application, it is automatically a virutal folder.
Which is just like we create a virutal folder under sub2 and set it as an
application.

Regards,

Steven Cheng
Microsoft Online Support

Get Secure! www.microsoft.com/security
(This posting is provided "AS IS", with no warranties, and confers no
rights.)

Get Preview at ASP.NET whidbey
http://msdn.microsoft.com/asp.net/whidbey/default.aspx
 
B

Brett Robichaud

Thanks Steven, I appreciate the additional info. This helps clear up and
verify what Pete stated.

-Brett-
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,228
Members
46,818
Latest member
SapanaCarpetStudio

Latest Threads

Top