ترفند ها و نکته های رایج در ASP.NET

پنجشنبه 11 تیر 1394

این مقاله نکته های بسیار رایجی برای خطا ها در ASP.NET در کنار پیکربندی آنها ارائه میدهد. برای آن دسته از برنامه نویسانی که در حین برنامه نویسی در web application با استثنائات رو به رو میشوند , بسیار مفید خواهد بود.

معرفی

این مقاله برای زمان مواجه شدن با استثنائات در طول برنامه نویسی میتواند مفید باشد. تعدادی نکته برای خطا های معمول و راه حل هایی برای استثنائات رایج ارائه میدهد و همچنین رو به رو شدن با مسائل در طول برنامه نویسی را شامل خواهد شد.

نکته ها و ترفند ها

1 . خطای 500 در زمان انتشار یک وب سایت در IIS رخ خواهد داد. اکثر خطا های پیکربندی به همین علت رخ میدهند.

راه حل :

نکته های ASP.NET

                                         تصویر: روش پیکربندی مرتبط با انتشار وب سایت در IIS

گام اول

Application pool مناسب را انتخاب کنید و اگر هم چارچوب هدف در application pool گم شد ، از روش زیر بر اساس ویندوز مربوط به خودتان اقدام نمایید :

با استفاده از Run as administrator یک پنجره ی command باز کنید

در پنجره ی command مسیر directory را به چارچوب مناسب تغییر دهید:

CD C:\Windows\Microsoft.NET\Framework64\v4.0.30319

پس از تغییر مسیر directory ، "aspnet_regiis i" را وارد کنید. این دستور موجودیت aspnet_regiis را درون directory فعال میکند.

گام دوم

کد انتشار مناسب را انتخاب کنید.

گام سوم

دسترسی مسیر فیزیکی را برای کاربر کنونی یا IUSR با تایید استفاده از "Test Settings" چک کنید.

2 . اگر شما وب سایت تان را بر روی یک سرور منتشر کرده اید و بخواهید برخی از کد های جزئی بخش code-behind را و آن را بر روی سرور آپلود کنید ، بهترین روش چه خواهد بود ؟

راه حل :

به جای انتشار کامل سایت از روش زیر استفاده کنید :

گام اول

پروژه را بدون خطا بسازید و سپس به فولدر bin پروژه بروید و سپس "projectname.dll" و "projectname.pdb" را در صورت وجود بیابید.

گام دوم

سپس آن دو فایل را در فولدر live project's bin قرار دهید و آنها را جایگزین کنید. اکنون وب سایت با آخرین تغییرات اعمال شده اجرا خواهد شد زیرا فایل .CS مان (همان قسمت code-behind) تبدیل به یک DLL شده است و صفحه ی ما به دنبال متد های مرجع برای فایل DLL میگردد.

3 . حال برای حل خطای "Maximum request length exceeded" در زمان کار با یک وب سرویس یا داده ی JSON چه باید کرد؟

راه حل :

به طور پیش فرض 4MB برای machine.config تنظیم شده است اما شما میتوانید آن را در web.config تان لغو کنید. به عنوان مثال برای گسترش محدودیت آپلود به 20MB کد زیر را به web.config اضافه کنید:

<system.web>   
   <httpRuntime executionTimeout="240" maxRequestLength="20480" />   
</system.web>  

IIS7 ( و نسخه های بعدی) دارای اسکن کردن درخواست به صورت توکار میباشد که حد یک فایل آپلود را به صورت پیش فرض 30MB تحمیل میکند. برای افزایش آن احتیاج به افزودن خط های زیر به کد خود دارید :

<system.webServer>   
    <security>   
        <requestFiltering>   
            <requestLimits maxAllowedContentLength="3000000000" />   
        </requestFiltering>   
    </security>   
</system.webServer>  

4 . request filtering Module یک پیکربندی است که از درخواستی که بیش از طول محتوای درخواست باشد جلوگیری میکند.

راه حل :

احتیاج به افزودن پیکربندی زیر به فایل web.config خود دارید :


<system.webServer>   
<security>   
<requestFiltering>   
<requestLimits maxAllowedContentLength="100000000" />   
</requestFiltering>   
</security>   
</system.webServer> 

5 . صفحه ای که درخواست میکنید به دلیل گسترش پیکربندی قابل اجرا نمیباشد. اگر صفحه یک script باشد ، یک handler به آن اضفه کنید. اگر نیاز به دانلود فایل است ، یک نقشه ی MIME (برای فایل JSON) اضافه کنید.

راه حل :

احتیاج به افزودن پیکربندی های زیر به فایل web.config تان دارید :

<system.webServer>   
<staticContent>   
<mimeMap fileExtension=".json" mimeType="application/json" />   
</staticContent>   
</system.webServer>

6 . زمانی که WebAPI2 را با یک برنامه ی وب MVC متحد میکنیم آنگاه تعدادی خطا های وابستگی بوجود می آید.

راه حل :

من بسته ی "system.web.http.webhost" را با استفاده از Nuget دوباره نصب کردم و یک فایل WebApiConfig به فولدر appstart اضافه کنید. حال قبل از RouteConfig وارد فایل global.aspx شوید. اگر RouteConfig قبل از webapiconfig افزوده شده باشد ، آنگاه WebApi درست کار نخواهد کرد.

WebApiConfig.cs

public static void Register(HttpConfiguration config)    
{   
// Web API routes   
config.MapHttpAttributeRoutes();   
config.Routes.MapHttpRoute(   
name: "DefaultApi",   
routeTemplate: "api/{controller}/{id}",   
defaults: new    
{   
id = RouteParameter.Optional   
});   
//To return json format data   
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));   
}

در فایل global.aspx

AreaRegistration.RegisterAllAreas();   
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);   
//added before RouteConfig   
GlobalConfiguration.Configure(WebApiConfig.Register);   
RouteConfig.RegisterRoutes(RouteTable.Routes);   
BundleConfig.RegisterBundles(BundleTable.Bundles);  

7 . چگونه سرعت صفحه ی درخواست در ASP.NET را افزایش دهیم.

راه حل :

تنها کافیست که پیکربندی زیر را به فایل web.config اضافه کنیم تا مسئله به طور خودکار حل شود.

 
<system.webServer>   
    <httpCompression directory="%SystemDrive%\inetpub\   
temp\IIS Temporary Compressed Files">   
        <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>   
        <dynamicTypes>   
            <add mimeType="text/*" enabled="true"/>   
            <add mimeType="message/*" enabled="true"/>   
            <add mimeType="application/javascript" enabled="true"/>   
            <add mimeType="*/*" enabled="false"/>   
        </dynamicTypes>   
        <staticTypes>   
            <add mimeType="text/*" enabled="true"/>   
            <add mimeType="message/*" enabled="true"/>   
            <add mimeType="application/javascript" enabled="true"/>   
            <add mimeType="*/*" enabled="false"/>   
        </staticTypes>   
    </httpCompression>   
    <urlCompression doStaticCompression="true" doDynamicCompression="true"/>   
</system.webServer>  

جمع بندی

در این مقاله برخی از نکات پیکربندی پایه ای را به همراه استثنائات رایج و راه حل های آنها آموختیم. این استثنائات اغلب در زمان برنامه نویسی در در web application رخ میدهد. من این مقاله را با نکات مفید دیگری به روز رسانی خواهم کرد.

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید