صفحه 3 از 3 نخستنخست 123
نمایش نتایج: از شماره 21 تا 24 , از مجموع 24

موضوع: ASP.net

  1. #21
    مدیر بازنشسته
    تاریخ عضویت
    2008/10/14
    سن
    36
    نوشته ها
    3,180

    Post جايگاه Asp.net در مقايسه صفحات ايستا و پويا

    <TABLE class=text cellSpacing=0 cellPadding=2 width="100%" border=0><TBODY><TR><TD colSpan=2>[SIZE=2][FONT=Arial][B]بررسی مفهومی صفحات وب ايستا و پويا و بررسی روش های تزريق اين پويائی از جايگاه سرويس دهنده و سرويس گيرنده بهمراه بررسی فناوريهای متدوال در اين خصوص با اشاره به ASP.NET[/B] [/FONT][/SIZE]
    [SIZE=2][FONT=Arial]<!--[URL="http://www.mycomputer.ir/index/content/view/478/51/#continue"]ادامه مقاله...[/URL]

    --><!-- Ads --><!-- <TABLE id=Table1 cellSpacing=0 cellPadding=1 align=center border=0> <TR> <TD align=center>[COLOR=#666666]آگهی[/COLOR]</TD></TR> <TR> <TD> [URL="http://senatorha.com/whatever/ads.aspx"][img]http://www.senatorha.com/forum/[/img][/URL]</TD></TR></TABLE> --><!-- Ads -->[/FONT][/SIZE]
    </TD></TR></TBODY></TABLE>[SIZE=2]
    [FONT=Arial]<HR>[/FONT][/SIZE]<TABLE class=text cellSpacing=0 cellPadding=2 width="100%" border=0><TBODY><TR><TD vAlign=top>[FONT=Arial][SIZE=2]ASP.NET، يك تكنولوژی جديد و قوی برای نوشتن صفحات وب پويا است. تكنولوژی فوق با دو تكنولوژی اصلی ديگر مايكروسافت يعنی ASP و دات نت همگرا است. ASP دارای عمری شش ساله بوده كه تاكنون توانسته است در زمينه ساخت صفحات وب پويا موفق عمل نمايد. دات نت يك فناوری جديد ارائه شده توسط مايكروسافت با هدف ايجاد تغييرات بنيادين در رابطه با طراحی و پياده سازی برنامه های كامپيوتری است.[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]برای شروع كار و استفاده از ASP.NET نيازی به آگاهی و دانش لازم در مورد ASP نبوده و با آشنائی مختصر با HTML می توان از تكنولوژی فوق برای ايجاد صفحات وب پويا استفاده كرد. اين فناوری بمراتب قدرتمندتر از هم نام قديم خود يعنی ASP است. ASP.NET دارای مجموعه ای از كنترل های تعريف شده است كه با استفاده از آنها، هم در زمان صرفه جوئی خواهد شد و هم بهره وری افزايش خواهد يافت.[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]در اين مقاله سعی می شود كه با مفاهيم صفحات وب ايستا (Static)، صفحات وب پويا (Dynamic)، تكنولوژيهای رايج جهت ايجاد صفحات وب پويا و ASP.NET، تشريح خواهند شد.[/SIZE][/FONT]
    [FONT=Arial][SIZE=2][/SIZE][/FONT]
    [SIZE=2][FONT=Arial][B]صفحات وب ايستا[/B]
    ما امروز بر روی اينترنت و وب سايت های متعدد، با موارد بيشماری از صفحات وب ايستا برخورد می كنيم. واژه "ايستا" در رابطه با يك صفحه وب چگونه تعريف می گردد؟ اين نوع صفحات، صفحاتی هستند كه شامل كدهای Html بوده و در يك محيط اديتور تايپ و فايل مربوطه با انشعاب Htm و يا Html ذخيره می گردد. مولف صفحه وب قبل از اينكه هر نوع درخواستی برای آن وجود داشته باشد، بطور كامل محتوی صفحه را مشخص كرده است. محتويات اين نوع از صفحات (متن، تصوير، لينك ها و) و شكل ظاهری آنها همواره يكسان خواهد بود، صرفنظر از اينكه چه كسی ، در چه زمانی و يا چگونه صفحه را مشاهده خواهد كرد. بنابراين می توان گفت محتويات اين قبيل از صفحات قبل از اينكه درخواستی ايجاد گردد، توسط مديريت سايت ايجاد و مشخص شده اند.[/FONT][/SIZE]
    [FONT=Arial][SIZE=2][/SIZE][/FONT]
    [SIZE=2][FONT=Arial][B]مراحل آماده سازی صفحات وب ايستا[/B]
    ۱- يك مولف صفحات وب، يك صفحه كه شامل كدهای Html است را ايجاد و آن را با انشعاب Htm و يا Html بر روی سرويس دهنده وب و در مسير مربوطه ذخيره می كند.
    ۲- كاربری از طريق برنامه مرورگر خود، در خواست استفاده از يك صفحه را می نمايد. درخواست فوق از مرورگر برای سرويس دهنده ارسال می گردد.
    ۳- سرويس دهنده وب فايل درخواستی با انشعاب Htm را پيدا خواهد كرد.
    ۴- سرويس دهنده وب كدهای Html فايل مزبور را از طريق شبكه برای مرورگر ارسال ميدارد.
    ۵- مرورگر كدهای Html را پردازش و صفحه فوق را نمايش خواهد داد.[/FONT][/SIZE]
    [FONT=Arial][SIZE=2][/SIZE][/FONT]
    [SIZE=2][FONT=Arial][B]محدوديت های صفحات وب ايستا[/B]
    فرض كنيد می خواهيم يك صفحه وب را بگونه ای طراحی كنيم، كه بمحض ورود هر كاربر زمان جاری سيستم بهراه يك پيام مناسب نمايش داده شود. در اين زمينه با چندين محدوديتی مواجه خواهيم بود كه صرفا و به تنهائی بكمك كدهای Html قادر به برطرف كردن محدوديت های فوق نخواهيم بود (اگر با اين عقيده موافق نيستيد، دست بكار شويد و يك صفحه وب را كه صرفا شامل كدهای Html است، تهيه نمائيد كه زمان را به وقت محلی بر روی سرويس دهنده نمايش دهد!).[/FONT][/SIZE]
    [FONT=Arial][SIZE=2]ما می دانيم كه يك كاربر در يك زمان خاص به ملاقات صفحه خواهد آمد ولی قطعا زمان آن را نمی دانيم. اگر بخواهيم زمان را بصورت كد در صفحه Html خود داشته باشيم، نتيجه همواره يكسان بوده و هميشه يك زمان ثابت و يكسان برای تمامی ملاقات كنندگان صفحه نمايش داده خواهد شد. كدهای Html به تنهائی هيچگونه امكاناتی برای شخصی سازی صفحات وب در اختيار قرار نمی دهند. نمايش هر صفحه برای هر كاربر يكسان خواهد بود (نظير رستورانی كه همواره و صرفنظر از ذائقه مشتريان خود، يك غذای ثابت و از قبل آماده شده را برای همه آماده و در اختيار قرار می دهد!).[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]Html دارای هيچگونه امنيتی نيز نبوده و كدهای آن را همه می توانند مشاهده و حتی تكثير نمايند. شايد تنها مزيت اين نوع از صفحات طراحی آسان، سرعت تكثير و توزيع آنها در يك شبكه باشد. بديهی است اين نوع صفحات دارای هيچگونه امكانات لازم جهت آفرينش صفحات پويا نيستند. چون ما نمی توانيم كدهای Html اضافه ای را بعد از درخواست يك صفحه به آن اضافه نمائيم. پس می بايست بدنبال روشی بود كه بتوان كدهای Html را بعد از درخواست يك صفحه وب، ايجاد نمود. بمنظور نيل به هدف فوق از دو روش عمده استفاده می گردد:[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]• صفحات پويای نزد سرويس گيرنده: بهره گيری از تكنولوژيهائی كه پويائی يك صفحه را از خاستگاه سرويس گيرنده تحقق خواهند داد (Client Side Dynamic Web Page).
    • صفحات پويای نزد سرويس دهنده: بهره گيری از تكنولوژيهائی كه پويائی يك صفحه را از جايگاه سرويس دهنده تحقق نمايند. ( Server Side Dynamic Web Page)[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]قبل از پرداختن به هر يك از موارد فوق لازم است در ابتدا با مفهوم و جايگاه يك سرويس دهنده وب بيشتر آشنا شويم. يك سرويس دهنده وب، نرم افزاری است كه مديريت صفحات وب را برعهده گرفته و آنها را برای سرويس گيرندگان مجهز به مرورگرها قابل دستيابی و استفاده می نمايد. تاكنون سرويس دهنده های وب متعددی طراحی و به بازار عرضه شده است. Apache، IIS و نمونه هائی از اين نوع نرم افزارها هستند. يكی از سرويس دهندگان وبی كه ASP.NET بر روی آن اجرا می گردد، IIS متعلق به شركت مايكروسافت است. IIS را می توان در زمان نصب ويندوز 2000 و يا XP نيز بر روی سيستم نصب نمود. IIS 5.0 بهمراه ويندوز 2000 و IIS 5.1 بهمراه ويندوز XP آ نصب خواهند شد. بهرحال جايگاه يك سرويس دهنده وب در ارائه امكانات و زيرساخت های مناسب برای طراحی صفحات وب پويا و بالطبع سايت های پويا يك امر برجسته است.[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]همانگونه كه گفته شد برای خلق صفحات وب پويا از دو رويكرد متفاوت استفاده می گردد. استفاده همزمان از دو روش فوق هيچگونه تعارضی با هم نداشته بلكه بالعكس توانائی يك صفحه وب پويا را افزايش خواهد داد. در ادامه به بررسی دو رويكرد فوق خواهيم پرداخت.[/SIZE][/FONT]
    [FONT=Arial][SIZE=2][/SIZE][/FONT]
    [SIZE=2][FONT=Arial][B]صفحات پويای نزد سرويس دهنده[/B]
    در مدل فوق ماژول هائی (Plugin) كه به مرورگر ملحق شده اند تمامی عمليات لازم جهت ايجاد صفحات پويا را انجام خواهند داد. كدهای Html از طريق يك فايل مجزا كه شامل مجموعه ای از دستورالعمل ها است برای مرورگر ارسال خواهد شد.مرورگرها دستورات فوق را جهت توليد كدهای Html و در زمان درخواست يك صفحه توسط كاربر، استفاده خواهد كرد. بنابراين محتويات يك صفحه بر اساس درخواست كاربران و بصورت پويا ايجاد خواهد شد.[/FONT][/SIZE]
    [FONT=Arial][SIZE=2]مراحل آماده شدن يك صفحه وب پويا با تاكيد بر روش های Client-Side :[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]۱- يك مولف صفحه وب مجموعه ای از دستورالعمل را برای ايجاد كدهای Html نوشته و آنها را در فايلی با انشعاب Htm ذخيره می نمايد.
    ۲- كاربران درخواست يك صفحه را از طريق مرورگر خود برای سرويس دهنده وب ارسال خواهند كرد.
    ۳- سرويس دهنده فايل درخواستی (در صورت نياز فايل ديگری كه شامل دستورالعمل ها باشد) را پيدا خواهد كرد.
    ۴- سرويس دهنده وب فايل حاوی كدهای Html و در صورت وجود دستورالعمل های مربوطه را برای متقاضی ارسال خواهد كرد.
    ۵- يك ماژول همراه مرورگر، دستورالعمل ها را پردازش و كدهای Html را در همان صفحه Html برمی گرداند.
    ۶- در نهايت كدهای Html توسط مرورگر نمايش داده می شوند.[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]تاكنون تكنولوژيهای متعددی بر اساس رويكرد فوق بموازات هم بوجود آمده و در اختيار طراحان و مولفان صفحات وب پويا قرار گرفته شده است. جاوا اسكريپت، VBScript، كنترل های ActiveX و اپلت های جاوا نمونه هائی از اين نوع تكنولوژيها بوده كه برای شناخت خوانندگان در اين بخش بصورت خيلی مختصر در رابطه با هر يك توضيحاتی ارائه خواهد شد.[/SIZE][/FONT]
    [FONT=Arial][SIZE=2][/SIZE][/FONT]
    [SIZE=2][FONT=Arial][B]جاوااسكريپت (JavaScript)[/B]
    اولين زبان اسكريپت در رابطه با مرورگرها است. زبانهای اسكريپت بعنوان حد ميانه بين كدهای Html و زبانهای معمولی برنامه نويسی قرار دارند و بصورت مفسر عمل می نمايند. جاوااسكريپت را نبايد با زبان برنامه نويسی جاوا اشتباه گرفت. شركت نت اسكيپ در ابتدا زبان اسكريپتی با نام LiveScript پياده سازی نمود. و بهمراه مرورگر NetScape 2.0 در اختيار علاقه مندان قرار گرفت. زمانيكه شركت نت اسكيپ با شركت Sun متحد گرديد، نام آن را جاوااسكريپت گذاشتند.[/FONT][/SIZE]
    [FONT=Arial][SIZE=2]بخشی از گرامر زبان فوق نظير ساختار اوليه، از جاوا گرفته شده است (خود جاوا نيز اغلب ساختار خود را از زبان C گرفته است). جاوااسكريپت دارای امكانات متعدد و قدرتمندی جهت كنترل و مديريت رفتار و محتويات يك مرورگر است. اما زبان فوق توانائی انجام عملياتی نظير: عمليات روی فايل ها را دارا نمی باشد ( شايد يكی از دلايل آن مسائل امنيتی باشد). فراگيری جاوااسكريپت نسبت به جاوا بمراتب راحت تر است. جاوا اسكريپت بگونه ای طراحی شده است كه قادر به خلق برنامه های كوچك و در عين حال موثر جهت انجام عمليات متعددی نظير برخورد با رويدادهای بوجود آمده در سطح كاربر نظير: كليك نمودن بر روی يك آيتم، بستن يك پنجره، فعال شده يك صفحه، خارج شدن از يك صفحه، حركت موس روی يك آيتم و است. مايكروسافت نسخه اختصاصی خود از جاوااسكريپت را با نام Jscript و همزمان با معرفی مرورگر IE 3.0 در اختيار علاقه مندان قرار داد.[/SIZE][/FONT]
    [FONT=Arial][SIZE=2][/SIZE][/FONT]
    [SIZE=2][FONT=Arial][B]VBScript[/B]
    شركت مايكروسافت همزمان با عرضه مرورگر IE 3.0 زبان اسكريپت اختصاصی خود يعنی VBScript را مطرح نمود. زبان اسكريپت فوق بر اساس زبان برنامه نويسی ويژوال بيسيك و با هدف رقابت با جاوااسكريپت در اختيار علاقه مندان قرار گرفت. شايد از معدود امتيازات اين زبان نسبت به جاواسكريپت بتوان به عدم حساسيت آن در رابطه با حروف بزرگ و كوچك (Case Sensitive) نام برد. كدهای نوشته شده توسط زبان فوق صرفا از طريق مرورگر شركت مايكروسافت (IE) قابل تفسير و اجرا بوده و نت اسكيپ اين زبان را حمايت نمی كند. گرچه با افزودن برخی Plug-In امكان استفاده از اين زبان در مرورگر نت اسكيپ نيز فراهم خواهد شد. مطمئا استفاده از زبان جاوااسكريپت بمراتب نسبت به زبان VBScript رايج تر است.[/FONT][/SIZE]
    [FONT=Arial][SIZE=2]اگر قصد انتخاب يك زبان اسكريپت برای پردازش های متكی بر سرويس گيرنده را داشته باشيم، بدون شك جاوااسكريپت يك گزينه مناسب خواهد بود. جاواسكريپت و VBScript هر دو بعنوان يك ماژول با نام Script Engine كه بهمراه مرورگرها ارائه شده است، مسئوليت تفسير و اجرای دستورالعمل های مربوطه را بر عهده خواهند گرفت. در پروژه دات نت، شركت مايكروسافت VB.NET را جايگزين VBScript نموده است.[/SIZE][/FONT]
    [FONT=Arial][SIZE=2][/SIZE][/FONT]
    [SIZE=2][FONT=Arial][B]كنترل های ActiveX[/B]
    يك كنترل اكتيوايكس عنصری است كه توسط يكی از زبانهای برنامه نويسی نظير ++C و يا جاوا پياده سازی می گردند. در زمانيكه اين نوع اكتيوايكس ها را با صفحات خود استفاده نمائيم، امكان انجام بخشی از عمليات متكی بر سرويس گيرنده نظير ايجاد يك Bar Chart ،Timer، تاييد كاربر و يا دستيابی به بانك اطلاعاتی فراهم می گردد. كنترل های اكتيوايكس از طريق تگ <Object> به صفحات وب اضافه می شوند.[/FONT][/SIZE]
    [FONT=Arial][SIZE=2]منادی تكنولوژی فوق شركت مايكروسافت بوده و تا نسخه شش مرورگر نت اسكيپ امكان استفاده از آنها توسط مرورگر فوق وجود ندارد. البته با نصب برخی Plug-in زمينه استفاده از كنترل های اكتيوايكس در مرورگر نت اسكيپ بگونه ای فراهم شده است. نكته جالب توجه در رابطه با تكنولوژی فوق اين است كه امكان انجام عمليات متفاوت بر روی كامپيوترهای كاربران نظير كار با فايل ها و ريجستری ويندوز بوجود می آيد و اين خود می تواند از لحاظ امنيتی مشكل و گاها با توجه به وجود فايروال ها تحقق ناپذير باشد. بهرحال نمی توان بر روی تكنولوژی فوق بعنوان يك راه حل جامع و فراگير برای خلق صفحات وب پويا استفاده كرد، مگر اينكه مخاطبان سايت خود را صرفا از بين كسانی انتخاب نمائيم كه ويندوز را بعنوان سيستم عامل و مرورگر IE را بعنوان مرورگر خود برگزيده اند.[/SIZE][/FONT]
    [FONT=Arial][SIZE=2][/SIZE][/FONT]
    [SIZE=2][FONT=Arial][B]Java Applet[/B]
    جاوا يك زبان برنامه نويسی مستقل از Platform است. جاوا نسبت به زبانهای اسكريپت دارای قابليت های بمراتب بيشتری است. هدف، استفاده از كدهای جاوا به شكل اپلت است. عناصر فوق بسادگی و توسط تگ <Applet> به صفحات وب ملحق خواهند شد. خوشبختانه مرورگرهای مايكروسافت و نت اسكيپ هر دو از طريق ايجاد يك ماشين مجازی جاوا (JVM) از اپلت های جاوا حمايت می كنند. بمنظور استفاده از اپلت های جاوا در يك صفحه وب از چندين روش می توان استفاده كرد: استفاده از تگ استاندارد <Object> يا استفاده از تگ غيراستاندارد <Applet>. تگ های فوق به مرورگر خواهند گفت كه يك فايل جاوا را از طريق سرويس دهنده وب DownLoad و سپس بكمك ماشين مجازی جاوا (JVM)، موجود در مرورگر، آن را اجرا نمايد.[/FONT][/SIZE]
    [FONT=Arial][SIZE=2]همانطور كه حدس زده ايد يكی از مسائل موجود در رابطه با استفاده از اپلت ها جاوا، زمان اضافه ای است كه صرف Download كردن می گردد. بنابراين در زمان استفاده از اپلت های جاوا سعی در نوشتن اپلت ها با كد كم باشيم. از رايج ترين موارد كاربرد اپلت های جاوا می توان به ايجاد Drop-Down Menu و انيميشن های متفاوت اشاره كرد.[/SIZE][/FONT]
    [FONT=Arial][SIZE=2][/SIZE][/FONT]
    [SIZE=2][FONT=Arial][B]صفحات پويای نزد سرويس دهنده[/B]
    در اين مدل كدهای Html بهمراه مجموعه ای از دستورالعمل ها برای سرويس دهنده ارسال و مجددا از دستورالعمل های فوق برای توليد كدهای Html برای صفحه ای كه كاربر درخواست كرده، استفاده شده و در نهايت صفحه بصورت پويا بر اساس درخواست كاربر ايجاد خواهد شد.[/FONT][/SIZE]
    [FONT=Arial][SIZE=2]مراحل آماده شدن يك صفحه وب پويا با تاكيد بر روش های Server-Side:[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]۱- يك مولف صفحه وب، مجموعه ای از دستورالعمل ها را برای ايجاد كدهای Html نوشته و دستورالعمل ها را در يك فايل ذخيره می كند.
    ۲- كاربران از طريق مرورگر خود، درخواست يك صفحه وب را نموده و اين درخواست برای سرويس دهنده وب ارسال خواهد شد.
    ۳- سرويس دهنده وب محل فايل حاوی دستورالعمل را پيدا خواهد كرد.
    ۴- سرويس دهنده وب دستورات موجود در فايل را بمنظور توليد كد Html اجرا خواهد كرد.
    ۵- سرويس دهنده وب كدهای توليد شده جديد را از طريق شبكه برای مرورگر ارسال می نمايد.
    ۶- مرورگر كدهای Html را پردازش و در نهايت صفحه وب نمايش داده خواهد شد.[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]نكته مهم در سناريوی فوق، اجرای تمامی پردازش ها بر روی سرويس دهنده قبل از ارسال صفحه برای مرورگر است. يكی از مزايای عمده مدل فوق نسبت به مدل Client-Side، اين مورد است كه : در يك صفحه وب صرفا شاهد كدهای Html خواهيم بود. اين بدان معنی است كه منطق صفحات وب در نزد سرويس دهنده وب مخفی نگهداری خواهد شد و می توان اين اطمينان را داشت كه اكثر مرورگرها قادر به نمايش نتايج پردازش های اجرا شده بر روی سرويس دهنده باشند. ASP و ASP.NET از مدل فوق تبعيت می كنند.[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]يكی ديگر از نكات مهم در رابطه با مدل فوق در اين است كه يك صفحه تا زمانيكه درخواستی برای آن دريافت نشده باشد، محتويات آن بوجود نخواهد آمد. در ادامه به بررسی برخی تكنولوژيهای موجود دراين مدل خواهيم پرداخت.[/SIZE][/FONT]
    [FONT=Arial][SIZE=2][/SIZE][/FONT]
    [SIZE=2][FONT=Arial][B]CGI يا Common Gateway Interface[/B]
    مكانيزمی برای ايجاد اسكريپت بر روی سرويس دهنده بوده تا بدين طريق امكان ايجاد برنامه های متكی بر وب فراهم گردد. CGI ماژولی است كه می بايست به سرويس دهنده وب اضافه گردد. قدمت استفاده از تكنولوژی فوق بمراتب بيشتر از ASP است و تا كنون تعداد بيشماری از صفحات وب پويا با استفاده از تكنولوژی فوق و بكمك يك زبان اسكريپت ايجاد شده اند. CGI اين امكان را فراهم خواهد كرد كه كاربر، يك برنامه ديگر ( نظير يك اسكريپت Perl ) را بر روی سرويس دهنده برای ايجاد صفحات وب پويا استفاده نمايد. استفاده از زبانهائی نظير C، Perl و ++C بهمراه تكنولوژی فوق بسيار رايج است. بهرحال تكنولوژی فوق امروزه در خيلی از سايت های بزرگ خصوصا سايت های متكی بر يونيكيس رايج بوده و قابليت اجرا بر روی چندين Platform را دارا می باشد.[/FONT][/SIZE]
    [FONT=Arial][SIZE=2][/SIZE][/FONT]
    [SIZE=2][FONT=Arial][B]ASP يا Active Server Page[/B]
    تكنولوژی فوق كه پس از عرضه ASP.NET با نام ASP كلاسيك ناميده می شود يكی از متداولترين روش های موجود و استفاده شده برای ايجاد صفحات وب پويا است. تكنولوژی فوق با بهره گيری از توان زبانهای اسكريپت نظير جاوااسكريپت و VBScript توانسته است پاسخی شايسته به طراحی صفحات وب پويا را ارائه نمايد. ASP يك ماژول جداگانه است كه در كنار سرويس دهنده وب قرار می گيرد(ASP.dll). تكنولوژی فوق نسبت به برخی از تكنولوژيهای همگروه از كارآئی پايين تری برخوردار بوده و در زمينه استفاده از زبانهای اسكريپت در كنار خود، نيز دارای محدوديت جدی است. بهرحال تكنولوژی فوق با سابقه شش ساله تاكنون توانسته است به خيل عظيم درخواست ها برای ايجاد صفحات پويا درست پاسخ دهد. ولی با ظهور خواسته ها و انتظارات جديد به چالش جدی كشيده شده است و شايد ظهور و تولد ASP.NET دليلی و پاسخی به برخی از انتقادات مطروحه در اين زمينه باشد.[/FONT][/SIZE]
    [FONT=Arial][SIZE=2][/SIZE][/FONT]
    [SIZE=2][FONT=Arial][B]JSP يا Java Server Page[/B]
    تكنولوژی فوق امكان تركيب Html و يا Xml را با كدهای جاوا فراهم می نمايد. اين فناوری برخلاف ASP كه صرفا توسط سرويس دهنده وب مايكروسافت (IIS) حمايت می گردد، توسط سرويس دهندگان متعددی حمايت شده است. JSP در مقايسه با ASP بمراتب دارای قدرت و سرعت بيشتری بوده و برنامه نويسان جاوا بخوبی با قابليت های متعدد آن آشنائی دارند. JSP اين امكان را فراهم می كند كه برنامه های جاوا از ويژگی محيط های متكی بر Java2 نظير JavaBeans و Java2 Libraries بخوبی استفاده نمايند.[/FONT][/SIZE]
    [FONT=Arial][SIZE=2][/SIZE][/FONT]
    [SIZE=2][FONT=Arial][B]ColdFusion[/B]
    با استفاده از تكنولوژی فوق، امكان ساخت صفحات وب پويا فراهم می گردد. اين تكنولوژی بصورت يك ماژول جداگانه است كه می بايست بر روی سرويس دهنده وب نصب گردد. صفحاتی كه توسط تكنولوژی فوق بوجود می آيند توسط هر نوع مرورگری قابل خواندن و نمايش خواهند بود. تكنولوژی فوق از مجموعه زيادی تگ كه توسط نرم افزار ColdFusion ارائه شده است، استفاده می كند. نرم افزار فوق بر روی سرويس دهندگان متعددی حتی IIS نصب و قابل استفاده است. مهمترين مسئله در رابطه با تكنولوژی فوق در اين است كه از تگ های Html-Like استفاده می گردد ( در ASP.NET از زبانهای برنامه نويسی و اشيا استفاده می گردد). يكی ديگر از نكات مهم در رابطه با تكنولوژی فوق در اين است كه تهيه آن رايگان نبوده و می بايست بيش از هزار دلار برای تهيه آن هزينه نمود![/FONT][/SIZE]
    [FONT=Arial][SIZE=2][/SIZE][/FONT]
    [SIZE=2][FONT=Arial][B]PHP[/B]
    تكنولوژی فوق كه در ابتدا Personal Home Page ناميده می شد و اخيرا PHP Hypertext Preprocessor ناميده می شود، يكی ديگر از تكنولوژيهای رايج برای ايجاد صفحات وب پويا است. تكنولوژی فوق بر خلاف ASP.NET بصورت Cross-Platform بوده و بر روی اغلب سيستم ها نظير ويندوز NT و اغلب نسخه های يونيكس قابل استفاده است. گرامر زبان فوق نظير C و Perl است. تكنولوژی فوق دارای برخی از ويژگی های برنامه نويسی شئ گرا بوده كه امكان سازماندهی و كپسوله نمودن كدها را فراهم می آورد.[/FONT][/SIZE]

    [SIZE=2][FONT=Arial][B]ASP.NET[/B]
    پس از معرفی تكنولوژيهای رايج در اين گروه، زمينه مناسب برای آشنائی با تكنولوژی ASP.NET بوجود آمده است. ASP.NET نيز بعنوان يك ماژول بر روی سرويس دهنده قرار می گيرد (aspnetIsapi.dll). در كنار تكنولوژی فوق مجموعه عظيم دات نت قرار دارد كه در صورت لزوم می توان برخی از عمليات و خواسته های خود را برای پردازش به دات نت ارسال كرد. در ابتدای اين مقاله، يك تعريف از ASP.NET ارائه شد (يك تكنولوژی جديد و قوی برای ساخت صفحات وب پويا) در اين مرحله می توان تعريف فوق را بصورت زير اصلاح نمود:[/FONT][/SIZE]
    [FONT=Arial][SIZE=2]ASP.NET يك تكنولوژی جديد و قوی از مجموعه تكنولوژيهای Server Side برای ايجاد صفحات وب پويا است.[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]ASP كلاسيك دررابطه با استفاده از زبانهای اسكريپت محدود بوده و صرفا به جاوااسكريپت و VBScript ختم می گردد (VBScript هم صرفا توسط سيستم های متكی بر ويندوز قابل استفا ده خواهد بود). ASP.NET امكان استفاده از مجموعه وسيعی از زبانهای برنامه نويسی را فراهم می كند. زبانهائی نظير VB.NET ،C# ،Jscript.NET ،Perl ،Python و نمونه هائی از زبانهائی می باشند كه می توان از آنها بهمراه ASP.NET استفاده كرد.[/SIZE][/FONT]
    </TD></TR></TBODY></TABLE>

  2. #22
    مدیر بازنشسته
    تاریخ عضویت
    2008/10/14
    سن
    36
    نوشته ها
    3,180

    Post Xml و خواندن اطلاعات از آن

    <TABLE class=text cellSpacing=0 cellPadding=2 width="100%" border=0><TBODY><TR><TD colSpan=2>[SIZE=2][FONT=Arial][B]روش تبديل اطلاعات از بانک اطلاعاتی به XML و نمايش اطلاعات آن[/B] <!--[URL="http://www.mycomputer.ir/index/content/view/477/51/#continue"]ادامه مقاله...[/URL] [/FONT][/SIZE]

    [SIZE=2][FONT=Arial]--><!-- Ads --><!-- <TABLE id=Table1 cellSpacing=0 cellPadding=1 align=center border=0> <TR> <TD align=center>[COLOR=#666666]آگهی[/COLOR]</TD></TR> <TR> <TD> [URL="http://senatorha.com/whatever/ads.aspx"][img]http://www.senatorha.com/forum/[/img][/URL]</TD></TR></TABLE> --><!-- Ads -->[/FONT][/SIZE]</TD></TR></TBODY></TABLE>

    [SIZE=2][FONT=Arial]<HR>[/FONT][/SIZE]

    <TABLE class=text cellSpacing=0 cellPadding=2 width="100%" border=0><TBODY><TR><TD vAlign=top><!--<div class="EnglishParag"><div class="MultiLineCode">-->[FONT=Arial][SIZE=2]در اين مقاله سعی دارم که نحوه نوشتن در XML و خواندن از آن را شرح دهم. برای مثال ما يك وبلاگ داريم که اطلاعات را از بانک اطلاعاتی Access می خواند. ولی من برای اينکه همين اطلاعات را در يک فايل XML هم داشته باشم اين کد را به Load صفحه اضافه کردم:[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]Dim DS As New DataSet()[/SIZE][/FONT]
    [SIZE=2][FONT=Arial]Dim strConnect As New OleDbConnection(ConfigurationSettings.AppSettings("datasource"))[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]Dim objSQLAdapter As New OleDbDataAdapter("SELECT * from blog order by id DESC", strConnect)[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]objSQLAdapter.Fill(DS, "blog")[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]Dim doc As XmlDataDocument = New XmlDataDocument(DS)[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]Dim writer As XmlTextWriter = New XmlTextWriter("D:\www\weblog\weblog.xml", Nothnig)[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]writer.Formatting = Formatting.Indented[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]doc.Save(writer) [/FONT][/SIZE]
    [FONT=Arial][SIZE=2]در اين کد با استفاده از شئ DataSet، اطلاعات را از جدول مورد نظر بانک اطلاعاتی خود می خوانيم و آن را در يک فايل XML به نام weblog.xml ذخيره می کنيم. اگر اين کد را اجرا کنيم يک فايل XML ايجاد می شود و هر وقت صفحه اول اجرا شود فايل XML رونويسی می شود. [/SIZE][/FONT]

    [SIZE=2][FONT=Arial]اما حالا يک فايل XML داريم و می خواهيم از آن استفاده کنيم. مخصوصا استفاده از XML برای سايت های خبری يا وبلاگ ها بسيار مناسب است. مثلا فرض کنيد که می خواهيم خبرهای موجود در يک سايت ديگر که به شکل XML ارائه می شوند (مانند RSS) را در سايت خودمان نمايش دهيم. برای اين کار ابتدا يک فايل ASPX ايجاد کنيد و اين کد را در قسمت Design يا همان HTML آن بنويسيد. [/FONT][/SIZE]
    [FONT=Arial][SIZE=2]<ASP:DataList id="theDataList" runat="server" Width="100%" dir=rtl CssClass=text>[/SIZE][/FONT]
    [SIZE=2][FONT=Arial]<ITEMTEMPLATE>[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]تاريخ :<%# DataBinder.Eval(Container.DataItem, "news_date") %>
    [/FONT][/SIZE]
    [SIZE=2][FONT=Arial]عنوان : <%# DataBinder.Eval(Container.DataItem, news_title") %>

    [/FONT][/SIZE]
    [SIZE=2][FONT=Arial]<%# DataBinder.Eval(Container.DataItem, "news_body") %>
    [/FONT][/SIZE]
    [SIZE=2][FONT=Arial]<HR>[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]</ITEMTEMPLATE>[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]</ASP:DataList>[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]
    [/FONT][/SIZE]
    [FONT=Arial][SIZE=2]ما در اينجا يک کنترل DataList ايجاد کرديم و مقادير مورد نظر را در آن نوشتيم. حالا کدی که در Load اين صفحه بايد بنويسيم به اين شکل خواهد بود:[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]Dim ds As New DataSet()[/SIZE][/FONT]
    [SIZE=2][FONT=Arial]ds.ReadXml("d:\www\weblog\weblog.xml", XmlReadMode.Auto)[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]theDataList.DataSource = ds[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]theDataList.DataBind() [/FONT][/SIZE]
    [FONT=Arial][SIZE=2]اگر اين صفحه را اجرا کنيد تمام فيلدهای XML در اين فايل ASP.NET نمايش داده خواهد شد. در مثال بالا از يک فايل XML موجود بر روی ديسک استفاده شده است حال آنکه می توانيم بجای اين آدرس محلی از يک آدرس موجود در وب که همان آدرس سايت مورد نظر است استفاده کنيم. مثلا اگر بخواهيد اخبار سايت مورد نظر را در سايت خود نمايش دهيد کافی است اينگونه عمل کنيد:[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]Dim ds As New DataSet()[/SIZE][/FONT]
    [SIZE=2][FONT=Arial]ds.ReadXml("http://www.website.com/weblog.xml",XmlReadMode.Auto)[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]theDataList.DataSource = ds[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]theDataList.DataBind [/FONT][/SIZE]

    </TD></TR></TBODY></TABLE>

  3. #23
    مدیر بازنشسته
    تاریخ عضویت
    2008/10/14
    سن
    36
    نوشته ها
    3,180

    Post ساختار يک صفحه Asp.net

    <TABLE class=text cellSpacing=0 cellPadding=2 width="100%" border=0><TBODY><TR><TD colSpan=2>[SIZE=2][FONT=Arial][B]در اين مقاله به زبانی ساده با قسمتهای تشکيل دهنده يک صفحه ASP.NET آشنا می شويم.[/B] <!--[URL="http://www.mycomputer.ir/index/content/view/475/51/#continue"]ادامه مقاله...[/URL] [/FONT][/SIZE]

    [SIZE=2][FONT=Arial]--><!-- Ads --><!-- <TABLE id=Table1 cellSpacing=0 cellPadding=1 align=center border=0> <TR> <TD align=center>[COLOR=#666666]آگهی[/COLOR]</TD></TR> <TR> <TD> [URL="http://senatorha.com/whatever/ads.aspx"][img]http://www.senatorha.com/forum/[/img][/URL]</TD></TR></TABLE> --><!-- Ads -->[/FONT][/SIZE]

    </TD></TR></TBODY></TABLE>

    [SIZE=2][FONT=Arial]<HR>[/FONT][/SIZE]

    <TABLE class=text cellSpacing=0 cellPadding=2 width="100%" border=0><TBODY><TR><TD vAlign=top><!--<div class="EnglishParag"><div class="MultiLineCode">-->[SIZE=2][FONT=Arial]صفحات ASP.NET به طور کلی دارای چندين بخش اصلی ميباشند. اين بخش ها را ميتوان در هفت مورد بررسی کرد:[/FONT][/SIZE]

    [SIZE=2][FONT=Arial]۱- دايرکتيوها[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]۲- بلوکهای اعلان کد[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]۳- کنترلهای ASP.NET[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]۴- بلوکهای پردازش کد[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]۵- توضيحات طرف سرور[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]۶- دايرکتيو Include طرف سرور[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]۷- متن ساده و تگهای HTML[/FONT][/SIZE]

    [SIZE=2][FONT=Arial][B]۱- دايرکتيوها[/B][/FONT][/SIZE]
    [SIZE=2][FONT=Arial]دايرکتيوها تنظيمات خاصی را برای صفحات aspx و ascx تنظيم ميکنند که نحوه کامپايل شدن صفحه را مشخص ميکند. دايرکتيوها با بلوک <% @%>نشان داده ميشوند و در هرکجای صفحه قابل تعريف می باشند (معمولاً در ابتدای صفحه آورده ميشوند).[/FONT][/SIZE]

    [SIZE=2][FONT=Arial]در Framework دات نت، هشت نوع دايرکتيو وجود دارد که دو نوع Page و Import از بقيه پرکاربردتر هستند. دايرکتيو Page فقط در صفحات aspx قابل استفاده است و برخی خصوصيات صفحه نظير زبان برنامه نويسی، نوع محتوا، نوع کدپيج، توضيحات مختصر در مورد صفحه، فعال بودن يا نبودن وضعيت ظاهر و... را مشخص ميکند. مثلاً خط زير به کامپايلر ASP.NET ميگويد که زبان برنامه نويسی صفحه VB و نوع محتوا، متن/ايکس ام ال است:[/FONT][/SIZE]


    [FONT=Arial][SIZE=2]<%@ Page Language="VB" ContentType="text/xml" %>[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]دو خصوصيت ديگر Page، قابليت ردگيری و قابليت نمايش پيام های خطای زمان اجراست که برای اشکال زدايی از برنامه بکار می آيند. اين دو خصوصيت بدين صورت فعال ميشوند:[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]<%@ Page Trace="True" Debug="True" %>[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]دايرکتيو Import، برای وارد کردن يک فضانام به صفحه بکار ميرود. به اين ترتيب کليه کلاسها و اينترفيس های آن فضانام در صفحه قابل استفاده ميشود. اين فضانام ميتواند جزيی از Framework دات نت يا يک فضانام تعريف شده توسط کاربر باشد. صورت کلی اين دايرکتيو اينگونه است:[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]<%@ Import namespace = "value" %>[/SIZE][/FONT]
    [FONT=Arial][SIZE=2]برای اطلاعات بيشتر در مورد دايرکتيوها ميتوانيد به MSDN .NET Framework General Reference و به قسمت Directive Syntax مراجعه کنيد.[/SIZE][/FONT]

    [SIZE=2][FONT=Arial][B]۲- بلوکهای اعلان کد[/B][/FONT][/SIZE]
    [SIZE=2][FONT=Arial]اين بلوکها برای تعريف متغيرها و متدها، زيربرنامه ها و توابع و به طور کلی برای تعريف منطق يک صفحه ASP.NET بکار ميروند. شکل کلی يک بلوک اعلان کد چنين است:[/FONT][/SIZE]
    [FONT=Arial][SIZE=2]<SCRIPT language="code language" src=" pathname" runat="server">[/SIZE][/FONT]
    [SIZE=2][FONT=Arial] Code goes here[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]</SCRIPT>[/FONT][/SIZE]
    [FONT=Arial][SIZE=2]تمامی کدهای يک صفحه ASP.NET در داخل چنين بلوکی قابل تعريف اند و اگر آنها را خارج اين بلوک تعريف کنيد، با پيغام خطا مواجه ميشويد. خصوصيت دلخواه Language، زبان برنامه نويسی ِ کدِ داخل بلوک را تعيين ميکند. دقت کنيد که اگر اين خصوصيت تعيين نشود، زبان پيش فرض صفحه که توسط دايرکتيو Page مشخص شده، به عنوان زبان برنامه نويسی صفحه در نظر گرفته ميشود. در ضمن زبان مشخص شده در تگ Script با زبان مشخص شده در دايرکتيو Page بايد يکسان باشند. در صورتيکه هيچ زبانی انتخاب نشده باشد، زبان پيش فرض، ويژوال بيسيک است.[/SIZE][/FONT]

    [SIZE=2][FONT=Arial]با استفاده از خصوصيت Src، ميتوان يک فايل بيرونی را که حاوی محتويات بلوک کد است، به صفحه پيوند زد. به اين ترتيب کدهای برنامه از آن فايل خوانده ميشوند و محتوياتِ ديگر بلوک اعلان کد، ناديده گرفته ميشوند. به مثالی در اين زمينه توجه کنيد.[/FONT][/SIZE]

    [FONT=Arial][SIZE=2][VB.NET][/SIZE][/FONT]
    [SIZE=2][FONT=Arial][/FONT][/SIZE]
    [SIZE=2][FONT=Arial]<SCRIPT language=VB runat="server">[/FONT][/SIZE]
    [SIZE=2][FONT=Arial] Sub EnterBtn_Click(Src As Object, e As EventArgs)[/FONT][/SIZE]
    [SIZE=2][FONT=Arial] Message.Text = "Hi " & Name.Text & ", welcome to ASP.NET!"[/FONT][/SIZE]
    [SIZE=2][FONT=Arial] End Sub[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]</SCRIPT>[/FONT][/SIZE]

    [SIZE=2][FONT=Arial][/FONT][/SIZE]
    [SIZE=2][FONT=Arial]<FORM runat="server">[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]Enter your name: <ASP id=Name runat="server/" :textbox>[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]<?xml:namespace prefix = asp /><asp:button onclick=" EnterBtn_Click" runat="server" text="Enter"></asp:button>[/FONT][/SIZE]

    [SIZE=2][FONT=Arial][/FONT][/SIZE]
    [SIZE=2][FONT=Arial]<asp:label id="Messag e" runat="server/">[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]</FORM>[/FONT][/SIZE]
    [SIZE=2][FONT=Arial][/FONT][/SIZE]
    [SIZE=2][FONT=Arial][/FONT][/SIZE]
    [SIZE=2][FONT=Arial][B]۳- کنترلهای ASP.NET[/B][/FONT][/SIZE]
    [SIZE=2][FONT=Arial]کنترلهای ASP.NET را ميتوان در کنار محتوای HTML بکار برد. تنها الزام در اين مورد، قرار دادن آنها بين دو تگ <FORM>و <"form runat="server> است. البته در مورد بعضی تگها نظير <"span runat="server> و <"asp:Label runat="server> ميتوان اين الزام را ناديده گرفت. يک محدوديت در اين زمينه اين است که فقط از يک تگ <"form runat="server> ميتوان استفاده نمود. در واقع در صفحات ASP.NET امکان گروه بندی به چند فرم وجود ندارد.[/FONT][/SIZE]

    [SIZE=2][FONT=Arial][B]۴- بلوکهای پردازش کد[/B][/FONT][/SIZE]
    [SIZE=2][FONT=Arial]بلوکهای پردازش کد برای اجرای کد موجود در محتوای متنی يا HTML يک صفحه ASP.NET بکار ميروند. دو نوع بلوک پردازش کد وجود دارد که عبارت اند از: کد درون خطی و عبارتهای درون خطی.[/FONT][/SIZE]

    [SIZE=2][FONT=Arial]کد درون خطی، دستور يا يکسری از دستورات را اجرا ميکند. اين کد با تگ های <% و %>مشخص ميشود. عبارت درون خطی، مقدار يک متغير يا متد را نشان ميدهد. عبارتهای درون خطی با کاراکترهای <% و =%>مشخص ميشوند. مثال زير کاربرد اين دو نوع کد را نشان ميدهد:[/FONT][/SIZE]
    [FONT=Arial][SIZE=2]<%@ Page Language="VB" %>[/SIZE][/FONT]
    [SIZE=2][FONT=Arial]<SCRIPT runat="server">[/FONT][/SIZE]
    [SIZE=2][FONT=Arial] dim str Message as string[/FONT][/SIZE]
    [SIZE=2][FONT=Arial] sub page_load[/FONT][/SIZE]
    [SIZE=2][FONT=Arial] str Message="Hello!"[/FONT][/SIZE]
    [SIZE=2][FONT=Arial] end sub[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]</SCRIPT>[/FONT][/SIZE]
    [SIZE=2][FONT=Arial][/FONT][/SIZE]
    [SIZE=2][FONT=Arial][/FONT][/SIZE]
    [SIZE=2][FONT=Arial][/FONT][/SIZE]
    [SIZE=2][FONT=Arial][/FONT][/SIZE]
    [SIZE=2][FONT=Arial]<FORM runat="server">[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]The Value Of strMessage is <% = strMessage %>[/FONT][/SIZE]
    [SIZE=2][FONT=Arial][/FONT][/SIZE]
    [SIZE=2][FONT=Arial]<% str Message="Goodbye!" %>[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]The Value Of strMessage is <%= strMessage %>[/FONT][/SIZE]
    [SIZE=2][FONT=Arial]
    [/FONT][/SIZE]
    [SIZE=2][FONT=Arial]</FORM>[/FONT][/SIZE]
    [SIZE=2][FONT=Arial][/FONT][/SIZE]
    [SIZE=2][FONT=Arial][/FONT][/SIZE]
    [FONT=Arial][SIZE=2]در مثال بالا توجه شما را به دامنه تعريف متغيرهای اعلان شده جلب ميکنم.[/SIZE][/FONT]

    [SIZE=2][FONT=Arial][B]۵- توضيحات طرف سرور[/B][/FONT][/SIZE]
    [SIZE=2][FONT=Arial]ممکن است بخواهيم مانند تمام زبان های برنامه نويسی ديگر، مابين کدهای برنامه نويسی از توضيحاتی جهت مفهوم تر شدن کد، استفاده کنيم. در ASP.NET اين توضيحات را در بين تگهای <%-- و --%>قرار ميدهيم. در اينصورت محتوای بين اين تگها، چه کد ASP.NET باشد و چه متن ساده، مورد پردازش قرار نخواهد گرفت. يک نکته اينکه نميتوان چند توضيح طرف سرور را به صورت تودرتو استفاده کرد.[/FONT][/SIZE]

    [SIZE=2][FONT=Arial][B]۶- دايرکتيو Include طرف سرور[/B][/FONT][/SIZE]
    [SIZE=2][FONT=Arial]با استفاده از اين دايرکتيو ميتوان محتويات يک فايل مشخص شده را در هر کجای صفحه ASP.NET قرار داد. شکل کلی اين دايرکتيو اينگونه است:[/FONT][/SIZE]

    [FONT=Arial][SIZE=2]<!-- #include file | virtual = filename -->[/SIZE][/FONT]
    [SIZE=2][FONT=Arial]ميتوان هم از خصوصيت File و هم از Virtual برای دادن مسير فايل استفاده کرد. اگر از File استفاده کنيم، فايلی که ميخواهيم شامل کنيم، نبايد در دايرکتوری بالاتر از دايرکتوری فايلی که دستور Include در آن است باشد. اما در Virtual، مسير فايل را ميتوان هر کجا که هست، به صورت کامل و نسبی وارد کرد. مثلاً اگر فايل ما در دايرکتوری به اسم MyDir که يکی از زير شاحه های wwwroot است، باشد؛ بايد دستور زير را بکار برد:[/FONT][/SIZE]

    [FONT=Arial][SIZE=2]<!-- #include virtual="/mydir/includefile.aspx" -->[/SIZE][/FONT]
    [SIZE=2][FONT=Arial]دايرکتيو Include قبل از هر کدی در صفحه اجرا ميشود، بنابراين برای تعيين مسير فايلی که ميخواهيم شامل کنيم نبايد از متغيرها استفاده کنيم.[/FONT][/SIZE]

    [SIZE=2][FONT=Arial][B]۷- متن ساده و تگهای HTML[/B][/FONT][/SIZE]
    [SIZE=2][FONT=Arial]آخرين ساختاری که ميتوان در يک صفحه ASP.NET بکار برد، محتوای HTML است. قسمتهای ثابت صفحه، با همان تگهای معمولی HTML و متن ساده ساخته ميشود. در واقع محتوای HTML صفحه ASP.NET همراه با بقيه کدها کامپايل ميشود. محتوای HTML ای با کلاس LiteralControl عرضه ميشود. با خصوصيت Text اين کنترل است که ميتوان محتوای HTML صفحه ASP.NET خود را عرضه کرد.[/FONT][/SIZE]


    </TD></TR></TBODY></TABLE>
    </asp:label>

  4. #24
    مدیر بازنشسته
    تاریخ عضویت
    2008/10/14
    سن
    36
    نوشته ها
    3,180

    Post Threadها در ASP.NET

    <TABLE class=text cellSpacing=0 cellPadding=2 width="100%" border=0><TBODY><TR><TD colSpan=2>[SIZE=2][B]در اين مقاله سعی شده است مفهوم Threa ding و ارتباط آن با ASP.NET و مفهوم Application Domain بيان گردد.[/B] <!--[URL="http://www.mycomputer.ir/index/content/view/474/51/#continue"]ادامه مقاله...[/URL] [/SIZE]

    [SIZE=2]--><!-- Ads --><!-- <TABLE id=Table1 cellSpacing=0 cellPadding=1 align=center border=0> <TR> <TD align=center>[COLOR=#666666]آگهی[/COLOR]</TD></TR> <TR> <TD> [URL="http://senatorha.com/whatever/ads.aspx"][img]http://www.senatorha.com/forum/[/img][/URL]</TD></TR></TABLE> --><!-- Ads -->[/SIZE]

    </TD></TR></TBODY></TABLE>

    [SIZE=2]<HR>[/SIZE]
    <TABLE class=text cellSpacing=0 cellPadding=2 width="100%" border=0><TBODY><TR><TD vAlign=top><!--<div class="EnglishParag"><div class="MultiLineCode">-->[SIZE=2]شايد زمانی که شما با برنامه Visual Studio.NET کار می کنيد با مواردی مواجه شويد که مفهوم آنها برای شما گنگ يا جديد باشد. يکی از اين موارد که بسياری از برنامه نويسان با آن مواجه شده اند همين مبحث Threa ding می باشد. احتمالا بايد ديده باشيد که در نامکده System، نامکده ديگری با نام Threa ding موجود است که برای کار با اين مبحث اختصاص يافته است. يا احتمالا وقتی قصد داشتيد که از Help مربوط به VS.NET استفاده نماييد، در مواردی که مربوط به راهنمای کلاسها می باشد، با يک توضيح با عنوان Thr ead Safety مواجه شده ايد.[/SIZE]

    [SIZE=2]در اين مقاله سعی شده است تا خواننده با مفهوم Thr ead و مسائل مربوط به آن آشنا شود. در تهيه اين مقاله از مستندات شرکت مايکروسافت و تجربيات نويسنده در اين زمينه استفاده شده است.[/SIZE]

    [SIZE=2][B]پروسه چيست؟[/B][/SIZE]
    [SIZE=2]قبل از آنکه به بررسی مفهوم Thr ead پرداخته شود لازم است کمی در مورد پروسه ها (Process) توضيحاتی ارايه گردد. هر برنامه ای که شما اجرا می کنيد، تحت نام يک پروسه به اجرا در می آيد و اين پروسه هست که وظيفه کنترل برنامه های شما را دارد. يکی از مزيت های پروسه ها اين هست که شما را قادر می سازد چندين برنامه را در کنار هم به اجرا در آوريد ( بطور مثال VS.NET و MS Access را در يک زمان اجرا کنيد و در همان لحظه توسط WinAmp به موزيک مورد علاقه خود گوش دهيد!). اساس Windows هم در تمامی نسخه ها بر همين مورد استوار بوده است. برای ديدن پروسه های در حال اجرا با فشردن Ctrl + Shift + Esc (در ويندوزهای 2000 به بالا)، Windows Task Manager را احضار نموده و با انتخاب سربرگ Processes قادر خواهيد بود که آنها را مشاهده نماييد. دو پروسه آشنا را می توان بصورت زير نام برد:[/SIZE]

    [SIZE=2]• پروسه devnev.exe که مجری VS.NET می باشد.[/SIZE]
    [SIZE=2]• پروسه IExplore.exe که مجری IE (مرورگر اينترنت اکسپلورر) می باشد.[/SIZE]

    [SIZE=2]البته تمام پروسه ها نشان دهنده يک برنامه آشکار نيستند. مثلا تمام desktop شما تحت پروسه ای با نام Explorer اجرا می گردد. اگر باور نداريد بر روی اين پروسه کليک راست گرفته و گزينه End Process را انتخاب نماييد تا ببينيد چگونه کل Desktop شما ناپديد می شود!! به هر حال منظور اين است که تمامی برنامه ها و کنترلرهای سيستم عامل تحت پروسه های معينی انجام می شوند.[/SIZE]

    [SIZE=2]بايد خاطر نشان کرد که IIS شما نيز تحت پروسه ای با نام INETinfo.exe اجرا می گردد. اين پروسه نيز بايد دائما در حال اجرا باشد تا بتواند کليه درخواستها برای ديدن صفحات وب را دريافت و آنرا مديريت کند. برای برنامه های ASP.NET هم پروسه ای جدا از پروسه IIS در نظر گرفته شده تا مديريت بهتری برای برنامه های ASP.NET وجود داشته باشد. اين پروسه ASP_wp.exe نام دارد که مخفف ASP Worker Process می باشد. توجه کنيد اين پروسه با اولين درخواست برای يک صفحه وب ASP.NET ايجاد می شود. همچنين ممکن است بنا به دلايلی اين پروسه اصلا اجرا نگردد. خوب علت آن، اين می تواند باشد که (بنا به هر دليلی) قبلا درخواست شده باشد تا برنامه های ASP.NET هم تحت پروسه IIS اجرا گردند (همان پروسه INETinfo.exe). خوب اين فعلا زياد فرقی نمی کند و فقط مهم اين است که بدانيد برنامه های وب شما تحت يکی از دو پروسه ذکر شده اجرا می گردند.[/SIZE]

    [SIZE=2][B]Thread چيست؟[/B][/SIZE]
    [SIZE=2]اما يک Threadچيست؟ در جواب اين سوال می توان گفت که Threadها منابعی هستند که از طرف سيستم عامل به يک پروسه (برنامه) اختصاص داده می شوند تا از آن برای اجرای محتويات خود استفاده نمايند. به بيانی ديگر شايد بتوان گفت که Threadها يک نوع زير پروسه هستند. برای روشن شدن تعريف فوق به بيان مثالی می پردازيم (پيشنهاد می شود که اين مثال را همزمان انجام دهيد تا درک بيشتری نسبت موضوع پيدا کنيد).[/SIZE]

    [SIZE=2]در ابتدا پنجره مربوط به Processes را در Windows Task Manager نمايان کنيد. سپس از منوی View گزينه Select Columns را انتخاب نماييد. از پنجره به نمايش در آمده گزينه Thread Count را انتخاب نماييد و سپس دکمه OK را فشار دهيد تا به حالت قبل بازگرديد. هم اکنون در پنجره مربوط به Processes يک ستون با نام Threads اضافه شده است. خوب حالا چند پنجره اينترنت اکسپلورر باز نماييد. همانطور که گفته شد، اينترنت اکسپلورر تحت پروسه IExplore.exe به اجرا در می آيد. حال به Processes در Windows Task Manager باز گرديد. مشاهده می کنيد که به ازای هر پنجره باز شده از اين نوع يک پروسه IExplore.exe نيز ايجاد شده است. بنابراين به اين نتيجه می رسيم که پنجره های اينترنت اکسپلورر هر کدام تحت يک پروسه جداگانه مديريت می شوند. هر کدام از اين پروسه ها نيز بنا به نيازشان خود حاوی چند Thread هستند.[/SIZE]

    [SIZE=2]خوب حالا پروسه Explorer.exe را بيابيد. به مقدار ستون Threads آن نگاه کنيد. می بينيد که اين برنامه مثلا شانزده Thread دارد. خوب اين تعداد را به خاطر بسپاريد و سپس سعی نماييد که يک صفحه Windows Explorer را باز نماييد (با کليک راست بر روی Start و انتخاب گزينه Explore). اينبار بر خلاف اينترنت اکسپلورر مشاهده می نماييد که هيچ پروسه جديدی همنام با Explore.exe ايجاد نمی شود! پس اين برنامه چگونه اجرا می گردد؟ مگر نه اينکه هر برنامه بايد تحت يک پروسه خاص اجرا شود، پس چرا اين برنامه تحت هيچ پروسه ای اجرا نمی گردد؟[/SIZE]

    [SIZE=2]يکبار ديگر به مقدار ستون Threads مربوط به پروسه Explore.exe نگاهی بيندازيد. خواهيد ديد که اين مقدار افزايش يافته است (اغلب به اندازه تعداد پنجره های Windows Explorer ای که باز کرده ايد). با سعی مجدد در باز کردن تعداد صفحات بيشتر خواهيد ديد که اين مقدار نيز افزايش می يابد.[/SIZE]

    [SIZE=2]بنابراين می توان نتيجه گرفت که برنامه های Windows Explorer همگی تحت يک پروسه خاص با نام Explorer.exe اجرا می گردند و هر نسخه از آن در يک Thread مجزا قرار می گيرد. در نتيجه می توان گفت Threadها نيز شبيه به پروسه ها هستند و مهم تر آنکه Threadها نيز قابليت اجرا در کنار هم را دارند. بدين ترتيب می توان گفت که می توان برنامه هايی نوشت که خود همزمان چند زيربرنامه مشابه را در آن واحد به اجرا درآورند. مثلا برنامه ای نوشت که در همان لحظه که در حال محاسبه عمليات زمانبر رياضی است، به در خواستهای کاربر نيز پاسخ دهد. اينکار بدين صورت انجام می شود که محاسبه آن عمليات را به يک Thread غير از Thread جاری واگذار نماييم. بدين ترتيب مشاهده می شود که در برنامه ها هم قابليت اجرای همزمان چند عمليات با هم وجود دارد. در ادامه بايد گفت که برنامه ها می توانند تعيين کنند که به چند Thread نياز دارند. اين يک درخواست به سيستم عامل است. [/SIZE]

    [SIZE=2]در ضمن توجه نماييد که يک Thread مختص به يک برنامه نيست. مثلا نمی توان گفت Thread شماره 120 به فلان برنامه تعلق دارد. Thread ها در سطح سيستم عامل آزاد هستند و پس از درخواست به دريافت يک Thread از سوی يک برنامه، توسط سيستم عامل يک Thread آزاد به آن برنامه تعلق می گيرد. پس از آن، تا رها شدن Thread مربوطه، آن Thread متعلق به آن برنامه می باشد و هيچ برنامه ديگری حق استفاده از آنرا ندارد.[/SIZE]


    [SIZE=2][B]رابطه ميان پروسه ها، Thread ها و ASP.NET[/B][/SIZE]
    [SIZE=2]هم اکنون که مفاهيم Thread و پروسه ها معين گرديد و متوجه شديد که برنامه های وب شما تحت يکی از دو پروسه ASP_wp.exe يا INETinfo.exe اجرا می گردند، به بيان رابطه موجود ميان اين موارد سيستم عاملی با برنامه های ASP.NET می پردازيم. اما قبل از آن لازم است با مفهوم جديد Application Domain که توسط ASP.NET ارايه شده است آشنا گرديد.[/SIZE]

    [SIZE=2][B]Application Domain چيست؟[/B][/SIZE]
    [SIZE=2]قبل از بوجود آمدن ASP.NET اجرای برنامه های وب بدين صورت بود که همگی برنامه ها تحت يک پروسه خاص اجرا می شدند و هر درخواست برای هر صفحه به يک Thread معين واگذار می شد و پس از اتمام آن، Thread مربوطه برای استفاده های بعدی آزاد می شد. حال اگر در يک وب سرور 1000 سايت قرار داشت، همگی تحت نام يک پروسه به اجرا در می آمدند. در اين ميان اگر يکی از سايت ها با مشکلی مواجه می شد ممکن بود که نياز باشد IIS را Restart کرد تا پروسه از اول اجرا شود و اين بدين معنی بود که تمام سايتها برای مدتی قادر به سرويس دهی نبودند و اين مسلما خوش آيند نمی باشد. بالاخص اينکه با افزايش تعداد سايتها احتمال بروز مشکل بيشتر می شد.[/SIZE]

    [SIZE=2]شايد بگوييد که چرا بايد پروسه IIS را Restart نمود و چرا Thread مربوطه Restart نمی شود؟ در جواب بايد متذکر شد که اگرچه Thread ها شبيه پروسه ها هستند ولی قدرت و محدوده عمل آنها با پروسه ها متفاوت است. مسلما يکسری منابع ميان Thread های مورد استفاده يک برنامه مشترک هستند و بنابراين در صورت بروز مشکل در آن موارد راهی جز Restart کردن پروسه(برنامه) نيست.[/SIZE]

    [SIZE=2]مايکروسافت اين مشکل را متوجه شد و آنرا در محيط جديد خود با مفهوم جديد Application Domain حل نمود. Application Domainها در واقع يک ناحيه کاری برای برنامه می باشند. قبل از هرچيز اينکه Application Domain ها مخصوص ASP.NET هستند و در ديگر انواع برنامه های NET. مفهومی ندارند. Application Domain در واقع محلی است که هر سايت تحت آن اجرا می گردد. Application Domainها مفهوم بسيار مشابه ای با پروسه ها دارند. برای هر Application Domain منابع جداگانه ای در نظر گرفته می شوند. مثلا يک حافظه کاملا جدا از ساير سايت ها. Application Domain ها تحت يک پروسه هستند. حال در صورت بروز يک مشکل برای يک سايت ديگر نيازی نيست که کل پروسه Restart شود.[/SIZE]

    [SIZE=2]در ضمن توجه نماييد که هر Application Domain می تواند چندين Thread را در اختيار بگيرد و بدين صورت نيست که يک تناظر يک به يک بين آنها باشد. در کل می توان مطالب فوق را در يک نمودار قرار داد که در بالاترين سطح پروسه ها هستند، سطح ميانی Application Domain و پايين ترين سطح Thread ها می باشند.هر سطح می تواند چندين مورد از موارد زير سطح را شامل گردد:[/SIZE]

    [SIZE=2]• پروسه ها [/SIZE]
    [SIZE=2]• Application Domains[/SIZE]
    [SIZE=2]• Threads[/SIZE]

    [SIZE=2]حال که روابط فوق مشخص شد، کمی هم به نحوه ارتباط و چگونگی استفاده از Threadها در ASP.NET می پردازيم.[/SIZE]
    [SIZE=2]اول آنکه شما می توانيد معين نماييد که پروسه ASP_wp.exe حداکثر از چند Thread استفاده نمايد. البته تنظيم اين مقدار فقط در فايل Machine.Config ممکن است و اين مقدار در تگ processModel تنظيم می شود. مقدار پيش فرض آن 25 می باشد.[/SIZE]

    [SIZE=2]در ادامه سعی می شود که با ذکر مثالی نحوه چگونگی استفاده از Threadها، با استفاده از Debugger موجود در NET Framework SDK. شرح داده شود.[/SIZE]
    [SIZE=2]در اينجا فرض بر اين است که شما کار با اين Debugger را می دانيد. در غير اينصورت می توانيد با مراجعه به بخش [/SIZE][URL="mk:@MSITStore:D:\taimaz\rayane\ebook\1240\IranASP.NET.chm::/samples.gotdotnet.com/quickstart/aspplus/doc/debugcomsdk.aspx"][SIZE=2][COLOR=#009cff]QuickStart[/COLOR][/SIZE][/URL][SIZE=2] از سايت ASP.NET نحوه کار با آنرا بياموزيد.[/SIZE]

    [SIZE=2]ابتدا نياز است که شما اين برنامه را اجرا نماييد. بنابراين:[/SIZE]
    [SIZE=2]• فايل DbgCLR.exe را در کامپيوتر خود يافته و آنرا اجرا کنيد،[/SIZE]
    [SIZE=2]• يک پروژه ASP.NET که بر روی آن کار می کنيد را درنظر گرفته و Code Behind صفحه اول (يا هر صفحه دلخواه ديگر) را باز کنيد (مثلا فايلindex.aspx.vb يا default.aspx.vb و يا هر فايل مورد نظر ديگر...)،[/SIZE]
    [SIZE=2]• در ادامه پروسه مجری ASP.NET را بايد به Debugger متصل نماييد. همانطور که در ابتدای مقاله ذکر شد، اين پروسه يا ASPNET_wp.exe است و يا INETinfo.exe. به هر حال برای متصل کردن آن به Debugger، منوی Tools | Debug Processes را انتخاب کنيد و پروسه ذکر شده را از ليست سمت چپ انتخاب و سپس دکمه Attach را فشار دهيد. توجه کنيد پروسه INETinfo.exe يک پروسه سيستمی است و برای انتخاب آن بايد قبل از آن گزينه Show System Processes را انتخاب کنيد تا اين پروسه در ليست مربوطه به نمايش درآيد. توجه کنيد، در صورت عدم وجود پروسه ASPNET_wp.exe، اقدام به انتخاب اين پروسه نماييد. [/SIZE]

    [SIZE=2]هم اکنون Debugger آماده است. برای ديدن Threadها بدين صورت عمل نماييد:[/SIZE]
    [SIZE=2]از منوی Debug، زيرمنوی Windows، گزينه Threads را انتخاب نماييد. يا اينکه به صورت مستقيم دکمه های Ctrl + Alt + H را همزمان فشار دهيد.همچنين توصيه می شود که برای بهتر ديدن نحوه استفاده از Threadها صفحه ای که قصد debug آنرا داريد، حتما شامل چند خط کد و برنامه باشد. [/SIZE]

    [SIZE=2]هم اکنون در ابتدای روال رويداد Page_Load يک Breakpoint قرار دهيد تا به محض شروع به بار کردن صفحه، بتوانيد اجرای آنرا در دست بگيريد.[/SIZE]
    [SIZE=2]هم اکنون همه چيز برای ديدن نحوه کار Threadها آماده است. حالا يک صفحه اينترنت اکسپلورر باز کنيد و يک درخواست برای ديدن صفحه مورد نظر (صفحه ای که Code Behind آن در Debugger باز شده است) انجام دهيد. خوب به علت وجود Breakpoint در روال رويداد Page_Load، اجرای برنامه در خط مورد نظر متوقف می شود. در پنجره Threads چه مشاهده می کنيد؟... می بينيد که يک خط به جدول آن اضافه شده است. اين خط حاوی اطلاعات زير است: [/SIZE]

    [SIZE=2]• شماره ID مربوط به Thread در حال اجرا،[/SIZE]
    [SIZE=2]• نام Thread، که معمولا <NONAME>می باشد،[/SIZE]
    [SIZE=2]• Thread Location که بيانگر محل اجرای کد می باشد. اين مقدار معمولا نشاندهنده نام روال در حال اجرا هست (مثلا در قسمت هايی از اجرا نشان دهنده اجرای روال Page_Load است)[/SIZE]
    [SIZE=2]• و موارد ديگر...[/SIZE]

    [SIZE=2]در هنگام اجرای اين صفحه مشاهده می کنيد که يک فلش زرد رنگ کوچک مقابل آن Thread قرار دارد که بيانگر اين است که هم اکنون اين Thread در حال استفاده است. با فشردن کليد F5 اجازه دهيد که برنامه ادامه يابد تا از Debugger خارج شده و حاصل آنرا ببينيد. خواهيد ديد که فلش زرد از جلوی Thread مذکور برداشته شده است. اين بدين معنی است که Thread مورد نظر رها شده و بدست سيستم عامل بازگشته است. حال توسط دو صفحه مجزای اينترنت اکسپلورر، دو درخواست به همان صفحه بدهيد. در اين حالت می خواهيم بررسی کنيم که چگونه درخواست های همزمان (يا تقريبا همزمان) مديريت می شوند.[/SIZE]

    [SIZE=2]پس از اينکه دو درخواست را ارسال کرديد، به Debugger بازگرديد. خوب احتمالا خواهيد ديد که يک Thread در پنجره Threads ديده می شود که نشاندهنده اولين درخواست است. با فشردن F11 (يا F10) يک خط يا چند خط آنرا اجرا نماييد، پس از اجرای اين چند خط (بستگی به ساختار برنامه شما دارد) مشاهده خواهيد کرد که اجرا به ابتدای روال Page_Load بازخواهد گشت!!... در واقع چنين نيست. يک نگاه به پنجره Threads بيندازيد. خواهيد ديد که يک Thread جديد نيز به اين ليست اضافه شده است. در واقع هنگامی که اجرا ظاهرا به خط اول بازگشته، چنين نبوده است، بلکه CLR شروع به اجرای درخواست دوم بصورت همزمان نموده است. حال با فشردن کليد F11 (يا F10) اجازه دهيد چند خط ديگر نيز به اجرا درآيد. مشاهده می کنيد که کنترل به Thread اول بازگشته است. حال همينطور به اينکار ادامه دهيد، می بينيد که فلش زرد رنگ کوچک موجود در پنجره Threads بطور متناوب بين Thread های موجود درليست حرکت می کند. ميزان اجرای تعداد کدهای موجود در Thread اول نسبت به Thread دوم در يک لحظه از زمان تقريبا برابر است. بدين معنی که به ازای هر يک خط اجرا از Thread اول، تقريبا يک خط از کد موجود در Thread دوم نيز اجرا می گردد. علت آنکه اين مقدار تقريبی بيان شده است، اين است که بسته به نوع کدهای موجود، ممکن است در يک لحظه چند کد از يک Thread باهم اجرا گردند. به هر حال از اين مثال می توان نتايج زير را بدست آورد:[/SIZE]

    [SIZE=2]• هر Thread بيانگر اجرای يک درخواست است. پس می توان گفت که هر صفحه درخواستی از طرف کاربر در يک Thread اجرا می شود. بنابراين هر صفحه در يک Thread اجرا می شود.[/SIZE]
    [SIZE=2]• با اين مثال بايد بصورت کاملا آشکاری درک کرده باشيد که واقعا درخواست ها بصورت همزمان انجام ميشوند. بسياری از برنامه نويسان اينگونه فکر می کنند که درخواستها در يک صف قرار گرفته و به ترتيب اجرا می شوند. در جواب بايد گفت که اينگونه نيست. در واقع تا جايی که ممکن باشد، درخواست ها بصورت همزمان انجام می شوند، مگر آنکه تعداد درخواست آنقدر زياد باشد که از حد تعداد Thread های مجاز برای استفاده يک برنامه بگذرد. در اين حالت درخواست های بعدی در يک صف قرار می گيرند.[/SIZE]
    [SIZE=2]• اين روش به صفحات مشابه محدود نمی شود. بدين معنی که هر تعداد درخواست از صفحات متفاوت، در صورت امکان، همزمان انجام می شود. [/SIZE]
    [SIZE=2]• شايد با انجام تعداد درخواست های همزمان بيشتر مشاهده نماييد که مابقی درخواست ها در صف قرار گيرند (مثلا فقط چهار درخواست همزمان اجرا گردند). اين به CLR، سيستم عامل و شرايط حاکم بر سيستم شما باز می گردد.[/SIZE]

    [SIZE=2]خوب هم اکنون بايد مفهوم همزمانی برای شما مشخص شده باشد. درک اين موضوع در مواردی بسيار حائز اهميت است. احتمالا اين سوال برای شما پيش آمده است که با اجرای همزمان ممکن است بسياری از مسايل با مشکل مواجه شوند. مخصوصا منابع مشترک در برنامه. اول آنکه بايد خاطر نشان کرد که ASP.NET در بسياری از موارد خود اين موضوع را مديريت می کند و شما را درگير برنامه های Multi-Thre ad (همين مفهوم استفاده از چند Thread در يک زمان را گويند) نمی کند. می توان گفت که مايکروسافت در اين زمينه بسيار مناسب عمل کرده است، چون کار کردن با برنامه های MultiThre ad از مسايل بسيار پيچيده و پردردسر برنامه نويسی است.[/SIZE]

    [SIZE=2]به هر حال مواردی هست که نياز به کنترل دارد. مثلا هنگامی که شما يک شئ را در Application يا Cache قرار می دهيد و اين امکان نيز وجود داشته باشد که هر کاربر آنرا تغيير دهد، بايد حتما اين موارد را پيش بينی نماييد. در غير اينصورت امکان تغيير همزمان در يک شئ وجود دارد و در بسياری از موارد باعث خراب شدن شئ شما خواهد شد. [/SIZE]

    [SIZE=2][B]Thread-Safety چيست؟[/B][/SIZE]
    [SIZE=2]احتمالا اين کلمه را هنگامی که به راهنمای کلاسهای موجود در NET Framework. مراجعه کرديد بسيار مشاهده نموده ايد. معمولا محتوی آن بر اين مضمون است که:[/SIZE]

    [SIZE=2]" کليه متدهای static (يا shared در VB.NET) برای عملياتهای MultiThreaded مطمئن و امن است، ولی برای مابقی متدها تضمينی نيست. "[/SIZE]

    [SIZE=2]اين بدين معنی است که در صورتيکه شما درخواست های همزمان داشته باشيد، متدهايی از نوع فوق خود از بروز مشکل جلوگيری می کنند. مثلا اگر متد insert برای يک شی Thread-Safe بود، بدين معنی است که اگر از اين متد استفاده شد، و در همان لحظه در يک Thread ديگر قصد بود که delete استفاده شود (برای همان نمونه ايجاد شده از کلاس)، باعث خراب شدن شی نمی شود و اين موضوع را کلاس تضمين می کند. همانطور که قبلا ذکر شد، عمليات های MultiThreaded، آنهايی هستند که می توانند در يک لحظه از زمان با هم اجرا گردند (نمونه ای که در مثال مربوط به کار با Debugger نشان داده شد، از همين نوع بود، چراکه چند Thread همزمان اجرا می شدند).[/SIZE]

    [SIZE=2]در مقاله بعد سعی خواهم کرد که يک نمونه از عمليات هايی که مجبور به کنترل آن هستيد و به اصطلاح Thread-Safe نيستد را شرح دهم که با اين مساله و نحوه کنترل آن بيشتر آشنا شويد.[/SIZE]

    [SIZE=2]در انتها لازم به ذکر است که در اين مقاله سعی شد موارد فوق بصورت ساده ای بيان گردند. بنابراين ممکن است که بعضی موارد فوق در واقعيت آنطور که گفته شد نباشند. ولی از آنجايی که اين نوع فرض، به اصل موضوع لطمه ای وارد نمی کند و باعث درک صحيح و آسانی نيز می شود، بدين گونه آورده شده است (مانند بسياری از فرض هايی که در علومی مانند رياضی و فيزيک در نظرگرفته می شود تا مسائل بهتر و آسانتر حلاجی شوند، و اين در حالی است که ممکن است فرض کاملا صحيح نباشد!!).[/SIZE]




    </TD></TR></TBODY></TABLE>

صفحه 3 از 3 نخستنخست 123

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •