خطا :

عدم امکان اجرای يک برنامه ASP.NET
"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


علت خطای فوق به دو موضوع متفاوت می تواند مرتبط باشد :

علت اول : زمانی که يک برنامه وب جديد با استفاده از ويژوال استوديو ايجاد می گردد، ويژوال استوديو دات نت به صورت اتوماتيک يک دايرکتوری مجازی را ايجاد و آن را به عنوان يک application پيکربندی می نمايد . در صورتی که به صورت دستی يک دايرکتوری مجازی ايجاد گردد و به عنوان يک application پيکربندی نشود ، امکان استفاده از برنامه وجود نداشته و با خطای فوق برخورد خواهيم کرد.

راهکار :

برای رفع اشکال فوق ، مراحل زير را دنبال می نمائيم :
- انتخاب دايرکتوری مجازی و کليک سمت راست برروی آن و انتخاب گزينه properties
- کليک بر روی دکمه "Create" در مجاورت Application name و textbox مربوطه . بدين ترتيب به صورت اتوماتيک "application" با استفاده از نام دايرکتوری مجازی ، ايجاد می گردد .
- پس از دنبال نمودن مراحل فوق امکان دستيابی به برنامه فراهم می گردد .

علت دوم : زمانی که يک برنامه دارای زيردايرکتوری هائی است ، می توان برای زيردايرکتوری يک فايل web.config را استفاده نمود . در اين رابطه خصلت هائی وجود دارد که نمی توان آنان را در فايل web.config مربوط به زيردايرکتوری تنظيم نمود( نظير : authentication و session state ) . اينگونه تنظيمات را نمی توان در ارتباط با زيردايرکتوری اعمال نمود ، مگر اين که زيردايرکتوری خود به عنوان يک application پيکربندی شده باشد .
در صورتی که قصد حفاظت فايل های موجود در يک زيردايرکتوری را داشته باشيم ، می توان اقدامات لازم را از طريق فايل web.config انجام داد ( از طريق web.config موجود در سطح ريشه و يا web.config موجود در زيردايرکتوری ) .
مثلا" فرض کنيد دارای يک دايرکتوری با نام admin می باشيم و می خواهيم حفاظت لازم در خصوص عدم دستيابی کاربران غيرمجاز به صفحات admin را فراهم نمائيم . بدين منظور می توان از فايل web.config در سطح ريشه application استفاده و اقدام به معرفی location path و authorization نمود :


اعمال محدوديت در دستيابی به يک زيردايرکتوری: سطح ريشه
<location path="Admin">
<system.web>
<authorization>
<allow roles="administrators" />
<deny users="*" />
</authorization>
</system.web>
</location>

در صورتی که اصرار به داشتن يک فايل web.config در سطح زيردايرکتوری به منظور حفاظت فايل های موجود در زيردايرکتوری را داشته باشيم ، می توان صرفا" اقدام به معرفی Authorization mode نمود :

اعمال محدوديت در دستيابی به يک زيردايرکتوری : سطح زيردايرکتوری
<configuration>
<system.web>
<authorization>
<allow roles="administrators" />
<deny users="*" />
</authorization>
</system.web>
</configuration>

بدين ترتيب ، حفاظت لازم در رابطه با دستيابی غيرمجاز به زيردايرکتوری فراهم می گردد .
منبع:

http://www.srco.ir/Articles/DocView.asp?ID=366