بخشی از مقاله
مقدمه
با ظهورASP.NET شاهد تحول در زمينه روشهای مرسوم اسکريپت نويسی به سوی برنامه نويسیکاملا حرفه ای هستيم. بدون ترديد نمی توان پذيرش گسترده .NETاز سوی جامعه توليد کنندگان نرم افزار را انکار نمود. و اين خود ثابت می کند که .NETدارای چارچوب قدرتمند برنامه نويسی می باشد.
حداقل چيزی که در مورد .NET می توان گفت اينست که .NET روشی نرم افزاری است که به هرکسی قابليت کد نويسی به هر زبانی را می دهد که با چارچوب آن مطابقت داشته باشد.
1 ) تاريخچه ASP
پيشينه ASP به سال 1995وشرايط ويژه ای باز می گردد که در آن شرکت مايکروسافت دريافتبه علت عدم شمول اينترنت در برنامه های خود از تحولی بنيادين در اين صنعت باز مانده است.تا آن زمان اين شرکت به دنبال تهيه وتوليد ابزار و پروتکل های اختصاصی خود برای شبکه مايکروسافت بود ولی ناگهان با نياز به استراتژی اينترنت مواجه گرديد.
مايکروسافت توانست خود را از شرايطی که از بقيه عقب افتاده بود به شرايطی تقريبا" مقتدرانه نزديک کند وبا کمک مرورگر وب Internet Explorer کنترل شديدی برروی بازار مرورگر وب بدست آورده وسرور اطلاعات اينترنت Internet information server (IIS)را در 100شرکت نصب نمود.
منشأ ASP
اگر به اواسط دهه نود باز گرديم می بينيم که در آن زمان انتخاب زيادی برای ابزارهای توليد وب در اختيار برنامه نويسان وب وجود نداشت که می خواستند سايت وب خود را به مکانی مناسب برای تجارت تبديل کنند. اين گزينه ها در سيستم عامل و برنامه های برنامه نويسی سمت سرور و ابزارهای توليد روميزی برای توليد راه حلها در دسترس بودند. در پايان برنامه نويس بايد برنامه های Common Graphic Interface (CGI) را به کار می برد. در اين برنامه ها از زبانهای کامپايل شدهای چون دلفی و ويژوال بيسيک يا زبانهای اسکريپت نويسی تفسير شده ای مثل پرل يا رکس و اسکريپت های لايه سيستم عامل مانند UNIX استفاده می گرديد.
در اوايل سال 1996مايکروسافت اولين تلاش خود را برای بهبود وضعيت موجود انجام داد. بدين منظورفن آوری رابط برنامه نويسی کاربردی سرور اينترنت Internet Server Application Programming Interface (ISAPI) را به عنوان بخشی از سرور اطلاعات اينترنت در نظر گرفت. ISAPI حاصل توسعه Win32 API ويندوز می باشد.
اين فن آوری به عنوان روشی برای توليد نرم افزار سرور وب تهيه گرديده بود. در واقع هدف از توليد
اين نرم افزار افزايش پنج برابر کارايی سيستم بوده است. با افزايش کارايی فوری تاثيرات جانبی حاصل می شود که موجب افزايش پيچيدگی برنامه نويسی برای برنامه نويس می گردد. بروز اين مسأله به علت ضعف برنامه نويسان نبود بلکه برای عملکرد درست برنامه های ISAPIبه دانش برنامه نويسی دقيقتر نياز بود. در همين حال مايکرو سافت برنامه نويسان را به سوی پذيرش فن آوری اتصال پايگاه داده اينترنت Internet Database Connector(IDC) تشويق می کرد.
تمامی برنامه نويسان وب مهارتهای برنامه نويسی لازم برای نوشتن نرم افزارهای ISAPI را نداشتندو چون ISAPI به کامپايل برنامه ها نيازمند بود مراحل زيادی در توليد سايت وجود داشت که سبب کندی روند برنامه نويسی می گرديد.
برنامه های ويژوال بيسيک در صورت به کارگيری CGI بسيار ضعيف عمل کرده و تمام منابع را در اختيار خواهند گرفت. زبانهای ديگر از جمله پرل برای آغاز يک برنامه خط دستور جداگانه و به منظور تفسير اجرای اسکريپتهای درخواست شده به سرور وب نياز دارند که اين امر موجب افزايش زمان بارگذاری صفحه و کاهش کارايی سرور خواهد شد.
CGI خود تمام منابع را در اختيار می گيرد چون درخواست هر صفحه سرورهای وب را وادار می کند تا فرايندهای جديد را متوقف نموده و از طريق اين فرايند ها ارتباط را برقرار نمايند.اين امر موجب اتلاف وقت و مصرف حافظه با ارزش RAMمی گردد. مشکل ديگری که فراروی تيم برنلمه نويسی در اواسط دهه نود وجود داشت اين مسأله بود که سايت در واقع ترکيبی از HTML و منطق است. آنها به روشی برای ادغام کد برنامه نويسان با قسمت طراحی صفحه بدون ايجاد آشفتگی نياز داشتند.
ايجاد قابليت محاوره ای که بتواند از سوی پايگاه داده حمايت شود نيز چالش ديگری فراروی برنامه نويسان بود.
تقاضا برای سايتهای وب پيچيده آغاز شده بود و برنامه نويسان به منظور رفع تقاضا به روشی قابل مديريت نياز داشتند ولی ابزارهای موجود سهولتی برای انجام اين کار ايجاد نمی کردند.
آنچه که لازم بود فن اوری ساده ای مبتنی بر متن و دارای اسکريپت همانند پرل بود که برنامه نويسان بتوانند صفحات خود را بدون نياز به کامپايل و با کمک ابزار ساده ای مانند Notepad ايجاد کنند.اين روشبايد در عين حفظ کارايي به حداقل منابع نياز داشته باشد.اين روش برای اينکه بتواند با استقبال مواجه شود می بايست زبانی را اجرا نمايد که به راحتی بتوان آن را آموخت و برای بسياری از توليد کنندگان آشنا باشد.
در همين زمان بود که مايکروسافت تکنولوژی صفحات فعال سرور ) (ASP را ارائه نمود.
نياز به مدل جديد ASP
واضح بود که مايکروسافت به تغييری اصولی برای رساندن ASPبه سطح استاندارد برنامه نويسی قدرتمند و صنعتی نياز داشت. صفحات فعال سرور فن آوری مبتنی بر اصول COMاست . فنآوری COM و ActiveX بخش مهمی از قدرت ASP را فراهم می کنند ولی محدوديت هايی نيز برای آن خواهند داشت.
مايکروسافت بايد تلاش زيادی در جهت بررسی COM و يافتن روشهای بهبود آن انجام می داد و اين تغييرات می بايست بر روی ASP نيز تأثير بگذارند. در همان زمان مايکروسافت دريافت که زمينه کاری برنامه نويسان تغيير يافته است و بر اساس استاندارد های جديد که هر لحظه عرضه می شوند به ويژه در نرم افزارهای توزيع يافته و اشتراک اطلاعات همچون Simple Object Access Protocol (SOAP) و XML_PRCکه در آنها از XMLاستفاده گرديده تجديد می شود.
خدمات وب متداول گرديد جاوا در همه جا ديده می شد و XML محبوبيت زيادی در ميان توليد کنندگان يافته بود. نسخه جديدی از ASP برای رفع اين نيازها کفايت نمی کرد . اگر تغييرات فقط به قصد شکست دادن حريف نبودند و می توانستند در مقابل اين چالشهای سخت مقاومت نمايند, آنگاه بسيار دور از دسترس به نظر می رسيدند.
Windows DNA و ASP که بر پايه فن آوری های Win32 API و COM اوايل دهه نود بودند نمی توانستند معماری فنی و منطقی برای نرم افزارهای توزيع يافته جديد فراهم نمايند در حالی که شرکت SUNبا استفاده از Java 2 Enterprise Edition (J2EE) مجموعه ای از فن آوری هايی را در اختيار داشت که برنامه نويسان می توانستند با دنبال نمودن آن پروژه های کوچک را همراه با Standard Edition آغاز نموده و
آنها را برای Enterprise JavaBeans کاملأ تغيير اندازه دهند.
در دنيای امروز تنها رقابت برای مرورگرهای مختلف ديده نمي شود بلکه رقابت در بخشهايي چون کانالهای توزيع , روشهای اجرا در کامپيوتر ها و...وشايد برای تبديل صفحات وب به نرم افزارها و خدمات وب يک بار مصرف نيز وجود دارند. بدون ترديد در حالی که مايکرو سافت در حال بررسی پيرامون فن آوری های مخصوص خود می باشد,بايد رقابت را نيز در نظر بگيرد.همانطور که مايکروسافت چارچوب کاری .NET را عرضه نمود,زبان جديدی را نيز برای قرن بيست و يکم تحت عنوان C#.NETمعرفی کرد و روشی کاملأ جديد برای ساخت نرم افزارها و وب فراهم ساخته و برای هر چيز موجود شامل ويژوال بيسيک و ويژوال ++C و صفحات فعال سرور جايگزين قرار داده اند.
در جولای 2000 .NET اولين اعلان عمومی خود را منتشر نموده و زبان جديد خود C# را در معرض نمايش قرار داده و نويد ارائه عملکرد بهتر و انعطاف پذيری بالاتر را نسبت به گذشته و پشتيبانی از انواع مختلف استاندارد های اينترنت را داد.
مروری بر اصول محيطی ASP.NET
مايکروسافت با ارائه ASP و زبانهای قديمی تر خود به صورت .NET در قرن بيست و يکم قدم مهمی برداشته است. ASP.NET که از VB.NET بهره می برد اکنون به برنامه ای کاملأ کار آزموده و شی گرا برای توليد نرم افزارهای وب تبديل شده و بهبود های زيادی را موجب گرديده است. ولی زبانهايي که از گذشته به ارث رسيده اند نمی توانند به اندازه .NET ابتکار عملی جامع داشته باشند به همين علت مايکروسافت زبان جديدی تحت عنوان C#برای چارچوب .NET تهيه نمود.
C# درعين اينکه برای برنامه نويسان C دارای امکانات آشنايي می باشد ولی جديد است دارای برخی خصايصRAD نيز بوده و به همين علت مورد توجه برنامه نويسان ويژوال بيسيک نيز می باشد.بعضی می گويند که C#زبان ارائه شده از سوی مايکروسافت برای رقابت با Java می باشد.
بعضی از نکات کليدی در موردASP.NET عبارتند از :
ASP.NET بخشی کليدی از Microsoft.NET يا برنامه ای جديد برای توليد نرم افزار می باشد.
.NET در واقع يک معماری کاربردی برای جايگزينی مدل ويندوزDNA و همچنين مجموعه ای از خدمات, ابزارها, نرم افزارها و سرورها بر پايه چاچوب کاری.NET و زبان اجرای مشترک می باشد.
ASP.NET به جای اينکه جايگزين ASP4 يا نسخه ارتقاء يافته تدريجی آن باشد از پايه بازنويسی شده است.
ASP.NET می تواند از هر آنچه که توسط .NET ارائه می شود از جمله پشتيباني از تعداد بيست يا بيشتر زبان ( ازC# گرفته تاPerl.NET ) و مجموعه کامل کتابخانه های نرم افزاری چارچوب کاری.NET بهره ببرد.
نرم افزارهای وب نوشته شده درASP.NET سريع, کارآمد, قابل مديريت, مقياس پذير و انعطاف پذير هستند و درک و کد نويسی آن ها نيز بسيار ساده می باشد.
تمامی اجزاء و نرم افزارهای وب کامپايل می شوند . اشياء .NET همگی به زبانهای يکسانی نوشته شده و همه آنها عملکرد يکسانی دارند در نتيجه به دلايل اجرايي نيازی به ترک محيط ASP وجود ندارد.
نياز کمتری برای استفاده از اجزای ثالث وجود دارد با نوشتن فقط چند خط کد می توان ارتباط ميانASP.NET وXML را برقرار نموده و يا شرايطی ايجاد نمود که ASP.NET به عنوان نوعی از خدمات وب عمل کرده يا از آن استفاده نمايد فايلها را منتقل کند يا صفحه سايتي را از راه دور پاک نمايد يا تصويری بر روی آن ايجاد کند.
استفاده از انعطاف پذيری ASP.NET
با استفاده از ASP.NET امکان انتخاب زبانها را خواهيم داشت. تمامی زبانهای.NET به کتابخانه های کلاس اصلی يکسان, انواع يکسانی از سيستمها, قابليتهای مساوی از نظر جهت يابی و ارث بری اشياء و قابليت عملکرد کامل با اجزاء COM موجود, دسترسی دارند.
ما می توانيم از آگاهی و کد نويسی يکسانی برای هر کاری از توليد وب تا ايجاد اجزاء يا سيستمهای بزرگ استفاده نماييم. برنامه نويسان هيچ نگرانی بابت اختلافهای موجود ميانAPI ها و تبديل انواع متغير ها يا حتی نصب و راه اندازی نخواهند داشت.
در ASP.NET تمامی استانداردهای مهم امروزی مانندSOAP وXML به علاوهADO.NET و کتابخانه های کلاس اصلی ترکيب شده اند و پياده سازی آن ها نسبت به ساير فن آوری ها حتی جاوا بسيار ساده تر خواهد بود.
يک برنامه نويس ASP.NET فقط به کامپيوتری که دارایNotepad و قابليت FTPميباشد برای نوشتن کدASP نياز دارد ولي امروزه با استفاده از ابزار خط دستور چارچوب کاری.NET و پيکربندی های مبتنی برXML برنامه ها اين عمل دقيقتر انجام مي شود.
مايکروسافت امکانات بسيار قدرتمند کلاسهای کتابخانه چون توابع قابل استفاده در شبکه برای عملکرد با پروتکل کنترل مخابره پروتکل اينترنت(TCP/IP ) و سيستم نام حوزه ( DNS ) و خدمات وب و داده XML و به تصوير کشيدن تصاوير گرافيکی را در چارچوب کاری .NET در نظر گرفته است.
در گذشته منظور از محدوديتهای اسکريپت نويسي ASP اجزاء بود که بنا به دلايل مربوط به عملکرد و نه دلايل معماری مورد نياز بودند.ASP.NET به عملکرد يکساني دسترسی داشته و از زبانهای يکسانی برای توليد اجزاء استفاده می کند در نتيجه اکنون اجزاء را می توان انتخابی از لحاظ معماری دانست.
يک برنامه نويس نسبت به تغييرات انجام گرفته در زمينه سيستم عامل وAPI محافظت می شود و از آنجايي که فن آوريهای.NET در رابطه با نحوه پياده سازی کد های ما می باشندبا استفاده ازCommon Type System ديگر نگران پياده سازيهای مختلف يک رشته يا عدد صحيح در زبان مورد استفاده خود نيستيم.
نوشتن برنامه های کاربردی ASP.NET
در نسخه های قبلیASP نصب و راه اندازی نرم افزار به برنامه ريزی دقيقی نياز داشت به خصوص در شرايطی که سيستم بزرگ و پيچيده بود.اين امر به علت وجود عوامل مختلفی چون نياز به انتقال, نصب ,ثبت اجزاء توليد شده, لزوم متوقف ساختن و آغاز سرور وب و تضمين بابت اينکه نسخه درست را در اختيار داريم ديده می شد.
ما مجبور به پيکربندی سرور وب از طريق کنسول مديريت مايکروسافت يا ابزار خط فرمان بوديم که بعضی اوقات ما را مجبور به متوقف ساختن و آغاز دوباره خدمات می کرد. اما با استفاده ازASP.NET تمامی اين موارد ساده شده است . فايل هایASP , اجزاء و گزينه های پيکربندی همگی فايلهايي هستند که آنها را با هم منتقل می کنيم. نيازی به ثبت به اجزاء نيست و ما می توانيم با استفاده از فايلهای متنی در قالبXML تغييرات پيکربندی را مشخص کنيم.ASP.NET از طريق ايجاد قابليت ميزبانی برای نسخه های مختلف يک جزء بر روی يک سيستم وابستگی های نسخه های نرم افزاری را نيز ساده کرده است.
تبديل کد به زبانهای متعدد
ASP.NET و چارچوب کاری.NET ارائه شده از سوی مايکروسافت شامل سه زبان اصلیJScript.NET وC#.NET وVB.NET می باشد.
C# همانندJ++ mark 2 توصيف شده است ولی در واقع بسيار فراتر از آن است.C# را در حقيقت بايدC++ ای دانست که از ابتدا تهيه شده است.مشکلات کاملا مستند شده اندتنها نکته ای که بايد به آن اشاره نمود اين است که در C++ شی گرايي آخرين راه حل انتخابی بوده است در حاليکه در C# اين مسئله به عنوان پايه در نظر گرفته شده است.تمامی عملکردها و پشتيبانی از چارچوب کاری NET. برای همه زبانهای آن فراهم گرديده و علاوه بر اين اشيايي که دريک زبان نوشته می شوند تحت هر زبان ديگری قابل استفاده و توسعه بوده و به ارث می رسند. اين قابليت مفهومی بسيار قدرتمند بوده و نظريه عدم وابستگی زبان را مطرح می کند. اين قابليت از طريق فنآوریCommon Language Runtime قابل دستيابی می باشد.
CLRکد زبان.NET را دريافت نموده و آن را به زبان واسطه ای مايکروسافت ( MSIL ) تبديل می کند. سپس اين زبان واسطه به کد دودويي ويژه دستگاه مقصد کامپايل می شود.
چگونه سرورهای وب فايلهایASP.NET را اجرا می کنند؟
هنگامی که بازديد کننده سايتی آدرس يک صفحه وب را درخواست ميکند مرورگر با سرور وب مشخص شده در آدرسURL تماس برقرار نموده و درخواستی را برای صفحه ای که در درخواستHTTP به صورت فرمول عنوان شده و به سرور وب فرستاده شده می فرستد.سرور وب به محض دريافت درخواست نوع فايل درخواستی را معين نموده و پردازش را به سرور رسيدگی کننده اختصاصی عبور می دهد. فايل هایASP.NET در صورت لزوم به کلاسهای صفحات.NET کامپايل شده و سپس اجرا می شوندو نتايج به مرورگر کلاينت فرستاده خواهد شد.
کامپايل نمودن به اين معنی است که در بارگذاری اول برنامه های ASP.NETبه مدت زمان بيشتری برای نمايش ( در مقايسه با نسخه های قبلی ) نياز می باشد ولی زمانی که کامپايل می شوند نمايش آنها به ميزان قابل توجهی سريعتر انجام می گيرد.
محاوره ميان کلاينت و سرور
برنامه هایASP.NET ترکيبی از نشانه گذاری سمت کلاينت و کد و پردازش در سمت سرور می باشند. هنگامی که يک صفحه فرم وبASP.NET بر روی مرورگر وب بازديد کننده ای بارگذاری می شود کد اضافی درون نسخه های قديمیASP قرار می گيرد. اين کد اضافی عملکرد فرم را که شامل رويدادهای سمت کلاينت و سرور, بررسی درستی و قابليت حفظ وضعيت مقدار فرم می گردد را افزايش می دهد سرور, نوع مرورگر بازديدکننده را تعيين نموده و نشانه ای برای مقايسه قابليتهای مرورگر ارسال می کند.
بعضی از محاوره های کلاينت درون مرورگر بازديدکننده انجام می شوددر حاليکه برخی ديگر به اطلاعاتی نياز دارند که بايد برای پردازش به سمت سرور فرستاده شوند.
به محض دريافت پاسخهای فرم مقادير فرم در قابليت جديد از ASP.NET به نام”State Bags” نگهداری شده و به يک عنصر مخفی فرم که شامل”View State” صفحه می باشد خلاصه می گردد. اين قابليت شرايطی را فراهم می کند تا عناصری فرمی که مورد محاوره بازديد کننده قرار گرفته اند همان مقادير را حين ارسال صفحه دارا باشند. همان طور که در شکل 1 ديده می شود مرورگر می تواند فرم اطلاعاتی را درخواست نموده و با استفاده از دو متدHTTP به نامهایPOST وGET اطلاعات را به سمت سرور ارسال نمايد.
Post Get
شکل 1- چگونگی ارتباط ميان کلاينت و سرور
پردازش سمت سرور ASP.NET
زمانی که سرور يک درخواست را دريافت می کند با استفاده از اطلاعات مسير مشخص شده صفحه مورد درخواست را می يابد و سيستم مربوطه صفحه را پردازش خواهد کرد.در صورت استفاده ازASP قديمی فعاليت زيادی در اين فرآيند انجام نمی گيرد فقط مقدار معينی مخفی سازی صورت می پذيرد.همانطور که در شکل 2 ديده می شود با به کارگيریASP.NET اين فرآيند با فعاليت بيشتری همراه بوده ولی تحويل و پردازش آن سريعتر انجام می پذيرد.
Request
Yes
No
شکل 2- فرآيند تحويل و کامپايل در سمت سرور
سرور با به کارگيری يک.dll ويژهASP.NET صفحهASP.NET را پردازش خواهد کرد. ASP.NET نيز همانند نسخه های قديمی دارای مجموعه بزرگی از اشياء می باشد که با اعمال معين پردازش مانند درخواست پايگاه داده ای, سيستم فايل و تهيه پاسخ سروکار دارند.
هنگامی که پاسخ کامل می شود به مرورگر کاربر بازگردانده خواهد شد. پاسخها معمولا به صورت فايلهایHTML هستند و مرورگر به محض رسيدن صفحه آن را به نمايش در می آورد.
يک فايل ASP.NET دارای پسوند .aspx است .معمولا اين فايل حاوی عناصر, HTML کدهای سمت سرور و کدهای سمت کلاينت می باشد.همانطور که در شکل 3 نشان داده شده است هنگامی که کاربری يک صفحه را درخواست می کند سرور آن را از ديسک بازيابی نموده وسپس آن را به ASPX Engine برای پردازش بيشتر می فرستد. ASPX Engine کدهای سمت سرور را کامپايل نموده و فايل کلاس صفحه را ايجاد می کند.سپس فايل کلاس را معرفی نموده و رهنمود لازم برای ايجاد شی پاسخ را اجرا می کند. در طی اجرای اين مرحله سيستم رهنمود برنامه نويسی ( کد در سمت سرور ) را برای پردازش داده ارسال شده از سوی کاربر دنبال می کند.سرانجام سرور شی پاسخ را به کلاينت می فرستد.اگر بخواهيم مراحل مهم و اصلی پردازش يک درخواست برای صفحه ASPx را نام ببريم می توان مراحل را به صورت زير در نظر گرفت :
• سرور درخواستی برای يک صفحهASPx را دريافت ميکند.
• سرور محل صفحه را در ديسک پيدا می کند.
• سرور صفحه را به ASP.NET Engine می فرستد.
• ASP.NET Engine صفحه را کامپايل نموده و کلاس صفحه را ايجاد می کند.اگر کلاس قبلا بار شده باشد به سادگی ريسمانی به کلاس اجرايي فراهم می کند( به جای ايجاد دوباره کلاس ). در حين کامپايل نمودن ممکن است به کلاسهای ديگر کد مانند کلاسهای موجود تحت کد و کلاسهای جزء نياز داشته باشد.اين کلاسها در اين مرحله اسمبل می شوند.
• ASP.NET کلاس را معرفی نموده و پردازش لازم را انجام داده و شی Response را ايجاد می کند.
• سپس سرور شی Response را به کلاينت می فرستد.
شکل 3- مراحل اصلی در ارائه يک صفحه ASPX
کامپايل و تحويل صفحات ASP.NET
اين فرآيند طی مراحل زير انجام می گيرد :
1. IISميانURL مورد درخواست با فايل موجود در ديسک سخت مقايسه ای را انجام می دهد اين مقايسه با ترجمه مسير واقعی به مسيری نسبت به ريشه سايت صورت می پذيرد.
2. هنگامی که فايل به دست آمد پسوند فايل(.aspx ) به فهرستی از انواع معين فايلها مقايسه می شود تا معين گردد که آيا فايل بايد برای بازديد کننده ارسال شود يا برای پردازش فرستاده شود.
3. اگر نسبت به زمانی که فايل آخرين تغييرات را متحمل شده اين اولين بازديد از صفحه می باشد کدASP با استفاده از کامپايلرCommon Language Runtime به زبان اسمبلی کامپايل شده ( بهMSIL ) سپس برای اجرا به کد دودويي ويژه ماشين کامپايل می گردد.
4. کد دوددويي يک.dll از کلاس.NET است که در يک محل موقتی ذخيره می شود.
5. دفعه بعدی که صفحه درخواست می شود سرور بررسی می کند که آيا کد تغيير يافته است يا نه .اگر همان کد قبلی باشد آنگاه مرحله کامپايل حذف شده و کد کلاس کامپايل شده پيشين اجرا می گردد در غير اينصورت کلاس حذف شده و منبع جديد دوباره کامپايل می شود.
6. کد کامپايل شده اجرا گرديده و مقادير درخواستی مانند فيلد های ورودی فرم يا پارامترهای URL تفسير می شوند.
7. اگر برنامه نويس از فرمهای وب استفاده کرده باشد آنگاه سرور می تواند بازديد کننده را شناسايي نموده و صفحاتی را که مطابق نياز بازديد کننده مناسب سازی شده اند منتقل نمايد.
8. نتيجه به مرورگر وب بازديد کننده ارسال می شود.
ساختار يک فرم وب ASP.NET
يک فرم وب نوعی فنآوری ASP.NET است که از آن برای ايجاد صفحه وب قابل برنامه نويسی استفاده می کنيم. اين فرم می تواند با استفاده از هر زبان نشانه گذاری اطلاعات را به کاربر نمايش دهد .نمايش در هر مرورگر امکانپذير بوده و برای پياده سازی منطق برنامه از کد روی سرور بهره می برد.در مستندات .NET مايکروسافت مشخصات زير را برای فرمهای وب ارائه نموده است :
فرم بر اساس Common Language Runtime تهيه شده و در نتيجه محيط اجرايي مديريت شده ای را به همراه ايمنی در تايپ, خواص وراثتی و انطباق پويا فراهم می نمايد .اين فرم را می توان با هر زبانی که رویCLR پشتيبانی می شود, نوشت.
فرم از ابزار ويرايش MYSIWYG و ابزار توليدVS.NET پشتيبانی می کند
فرم از مجموعه کاملی از کنترلها پشتيبانی می کند که قابليت لفاف بندی منطق صفحه به اجزايي با توانايي دوباره به کار گيری داده و امکان استفاده ساده از رويدادهای صفحه را فراهم می کند.
اين فرم قابليت جداسازی ميان کد و محتويات را در صفحه می دهد.
اين فرم مجموعه ای از خصوصيات مديريت حالت را فراهم می سازد که مانع از مشاهده حالت صفحه ميان درخواستها می گردد.
يک فرم وب می تواند شامل راهنماييهای لازم, اسکريپتهای سمت سرور, متون استاتيک, کنترلهای وب کنترلهای HTML و بسياری موارد ديگر باشد.
2 )مقدمه اي بر .NET C#
NET. تكنولوژي جديد مايكروسافت براي رفع مشكلات COM و برنامه نويسي تحت اينترنت است. قبل از شروع كار با NET. تصور برنامه نويسان، نسخه اي جديد از زبانهاي موجود مانند VB با ++VC است اما NET. يك محيط برنامه نويسي جديد است كه مي توان گفت شباهتهاي زيادي با محيط هاي قبلي دارد.
اگر چه برنامه هاي VB يا ++VC را مي توان با تغييرات نسبتاً كم به محيط NET. انتقال داد، ولي اگر بخواهيم از توانائيهاي NET. بهره مند شويم، چيزهاي زيادي براي يادگيري و تغييرات زيادي در برنامه ها داريم (خصوصاً برنامه نويسان VB ).
NET. يك مدل شي گرا (Oriented Object) شامل صدها كلاس ارائه داده كه عدم هماهنگي در محيطهاي ويندوز را از ديد برنامه نويس مخفي مي كند. براساس نسخه هاي مختلف ويندوز يك كلاس ممكن است براي توابع گرافيكي از GDI ،DirectX و يا Open GL استفاده كند و برنامه نويس نياز به نگراني در مورد اين عدم هماهنگي ندارد.Security در داخل محيط NET. قرار داده شده و برنامه نويس يا حتي مسئول نصب و نگهداري برنامه ميتواند اجازه دسترسي به منابع مانند فايلها يا registry را از داخل محيط برنامه و يا خارج آن به يك كاربر داده ياسلب كند (مسئول نصب يا Administrator اينكاررا از طريق فايلهاي Config انجاممي دهد).
مي توان به NET. به عنوان نسل جديد COM نگاه كرد اما در نحوه عمل آنها كاملاً متفاوت هستند. (لازم به ذكر است كه مايكروسافت استفاده از COM را در محيط NET. پشتيباني مي كند هر چند كه مشكلاتي هم در اين زمينه وجود دارد) در NET. به جاي Component ،اسمبلي داريم . هر اسمبلي مي تواند علاوه بر كد. فايلهاي ديگري نظير html ،.gif. و يا حتي يك dll. ديگر را در خود جا دهد . اسمبلي با پسوندexe. يا dll. وجود دارد.
هر اسمبلي مانند COM يك Version دارد ولي در Registry ثبت نمي شود. مايكروسافت تاحدي به روش قديمي خود يعني فايلهاي ini برگشته اما اين بار از فايلهايXML براي ذخيره اطلاعات استفاده كرده. اين فايلها مي توانند اطلاعات را بصورت ساختار يافته ذخيره كنند. مسير و تنظيمات تمام اسمبليهاي يك برنامه در يك فايل Config كه در شاخه اصلي برنامه و در كنار فايل اجرايي اصلي برنامه قرار دارد ذخيره مي شود.
بنابراين شما مي توانيد يك برنامه و تمام اسمبلي هاي آنرا در يك شاخه و زيرشاخه هاي آن داشته باشيد و نسخه ديگر برنامه به همراه اسمبلي هاي آنرا در شاخه ديگر. تنهاكاري كه بايد بكنيد آن است كه مسير اسمبلي ها را در Config فايلها تعيين كنيد و هر دو برنامه بدون هيچ تداخلي اجرا مي شوند !
سوالي كه ممكن است به ذهن برسد اين است كه با استفاده از Registry منبع مشتركي از Componentها داريم و نيازي نيست كه يك نسخه COM را به صورت تكراري داشت. NET. اين مسئله را با مفهوم Shared Assembly حل كرده. مسئله نصب نيز در محيط NET. بسيار ساده شده و همه عمليات نصب با يك Xcopy انجام مي شود.
فايل Config اطلاعات ديگري نظير نحوه نمايش خطاهاي برنامه و يا تنظيمات Security را نيز در خود دارد. NET. مشكل Memory Leaking را با عوض كردن نحوه مديريت object ها حل كرده است وديگر خود يك شيء اطلاعاتي را كه براي زندگي ويااز بين رفتنش احتياج است، ذخيره نمي كند. تمام اشاره گرها تحت كنترل محيط اجرايي Net. وتوسط Garbage Collector آزاد مي شوند. اين كار در زمان پر شدن heap (حافظه اختصاص يافته به object ها) ونبود حافظه لازم براي object هاي جديد انجام مي شود.
سرويسهاي وب در .NET
اين روزها در هر مقاله و متني كه اقدام به معرفي چهارچوب .NET نموده اند ، آنچه بيش از هر چيز به چشم مي خورد سرويسهاي وب مي باشد و هر جا كه به توصيف امكانات جديد .NET پرداخته شده ، امكاني كه بيش از بقيه خودنمايي مي كند و برگ برنده .NET خواهد بود سرويسهاي وب آن است. من هم در پيروي از اين روند ، توضيحاتي در مورد سرويس وب در .NET ارائه مي دهم.
بدون شك با اشياء و برنامه نويسي شيء گرا آشنا هستيد. سرويسهاي وب را مي توانيد مانند اشياء نرم افزاري تصور كنيد كه داراي متدهايي هستند كه مي توان آنها را از هر نقطه بر روي اينترنت ( يا يك اينترانت داخلي ) صدا زد. هر برنامه كاربردي مي تواند بدون در نظر گرفتن عوامل زير متدها را فراخواني كند:
• ماشين و سيستم عاملي كه سرويسهاي وب بر روي آن اجرا مي شوند.
• ماشين و سيستم عاملي كه برنامه فراخوان بر روي آن اجرا مي شوند.
اگر با روش فراخواني از راه دور (RPC) آشنا باشيد مي توانيد سرويسهاي وب را بصورت سكوي جهاني براي فراخواني پروسه ها از هر نقطه اي روي اينترنت در نظر بگيريد.
سرويسهاي وب بسيار انعطاف پذير و در نتيجه محبوب خواهند بود ، زيرا اولاً از پروتكلهاي استانداردي مانند HTTP - كه براي ارسال و دريافت صفحات وب نيز كاربرد دارد – استفاده مي كنند. ثانياً از قالبهاي استاندارد فايل مانند XML جهت نگهداري و ارسال اطلاعات بهره مي برند. اين دو ويژگي عمده همان استاندارد SOAP (Simple Object Access Protocol) را تعريف مي كنند كه استاندارد ارتباطي سرويسهاي وب مي باشد.
توجه کنيد که اين پيچيدگي و نو بودن سرويسهاي وب و SOAP نيست که آنها را اين قدر محبوب ساخته است. اين سرويسها در واقع بسيار ساده هستند. در اين جا بايد خاطر نشان کرد که همين سادگي در وب ،
HTML و XML بود که آنها را به استانداردهاي جهاني شبکه اينترنت تبديل کرد و انتظار مي رود همين اتفاق در مورد براي سرويسهاي وب و SOAP نيز رخ دهد.
نام ويژگي توضيحات
BufferResponse قابل خواندن و نوشتن- مشخص ميکند که پاسخ به اين درخواست بافر شود يا خير
CacheDuration قابل خواندن و نوشتن- مشخص ميکند که پاسخ ،چند ثانيه در Cache نگهداري شود
Description توضيحي در مورد متد وب
EnableSession مشخص ميکند که حالت Session براي متد وب فعال باشد يا خير
MessageName نام منتسب به متد وب در داده هاي ارسالي به و دريافتي از متد (هنگام از Method OverLoading)
TransactionOption پشتيباني از تراکنش براي يک متد وب
با استفاده از قابليتهاي ديگر چهارچوب .NET مي توان عملکردهاي ديگري به سرويس وب خود افزود و يا رفتار آن را تغيير داد. گرچه همه آنها را نمي توان در اينجا توضيح داد ولي يکي از جالبترين خصوصيات. کلاسWebMethodAttribute ميباشد كه در جدول زير مي توان 6 خصوصيت قابل تغيير براي اين کلاس را مشاهده کنيد
ويژگيهاي عمومي WebMethodAttribute
جهت ارائه توضيحات (Description) براي سرويس وب خود خصوصيت Description را به يك متن با معني براي متد مورد نظر تغيير دهيد. اين متن بعداً به Metadata در سرويس وب شما كه معروف به WSDL(Web Service Description Language) مي باشد اضافه خواهد شد.
يك مشخصه ي ديگر به نام WebServiceAttribute نيز در همين فضاي نامي وجود دارد كه هدف آن كل كلاس مي باشد و Description آن نيز در واقع توضيح كاري است كه كلاس انجام ميدهد.
[WebService(Description="A simple Currency Converter Web Service.2 Methods")]
public class CurrConv
{ …
…
با اعمال اين تغييرات بايد ببينيم كه سرويس وب از بيرون چگونه به نظر مي رسد و اين يعني آزمايش كردن سرويس وب و نوشتن يك برنامه كاربردي كه از آن سرويس استفاده نمايد.
3 ) مقدمه اي بر C#
زبان برنامه نويسي C#محصول جديدي از مايكروسافت است كه در حال حاضر به عنوان مدرنترين زبان كامپيوتري شناخته ميشود .اين زبان، اولين زباني است كه براي .Net Platform طراحي شده و بسياري از اجزاي .Net نيز بدين زبان نوشته شده اند .مايكروسافت عنوان مي كند نقشي كه C/C++ براي ويندوز ايفا كرد، اين بار C# براي .Net انجام خواهد داد. اين زبان توسط واحد تحقيقات مايكروسافت به مديريت اندرس هلزبرگ (Anders Hejlsberg) طراحي شده است. برنامه نويسان پاسكال، اندرس هلزبرگ دانماركي را هيچ گاه از ياد نخواهند برد. او كه در بورلند 15 سال سابقه درخشان دارد و پاسكال را به زبان قدرتمندي به نام دلفي تبديل كرده است، اين بار در مايكروسافت قدرت تمام زبانهاي برنامه نويسي را در C# جاي داده است.
علت طراحيC#
زماني كه .Net Platform براي بهبود ساختار سيستم عاملها و همچنين افزايش قدرت آنها در شبكه به منظور حفاظت از سيستم طراحي مي شد، معلوم شد كه ساختار دستورات و نگارش زبانهاي برنامه نويسي بايد به طور كل تغيير كند. براي برنامه نويسان مايكروسافت دو زبان همه منظوره Visual Basic و Visual C++ وجود داشت .هر دوي اين زبانها ريشه اي تاريخي در صنعت كامپيوتر دارند و طي سالهاي گذشته دستخوش تغييرات بسيار به منظور مطابقت با سيستم عاملها و شبكه ها شده اند .ساختار .Net به گونهاي ايجاب ميكرد كه اين زبانها به منظور مطابقت با .Net Platformتغييرات اساسي يابند. از طرفي اعمال اين تغييرات به دليل ساختار قديمي كه زبانهاي مذكور داشتند، مشكلاتي را براي برنامه نويسان به وجود مي آوردند .به همين دليل در مايكروسافت پيشنهاد طراحي زبان جديدي داده شد كه بتواند به طور كامل از ساختار .Net پيروي كرده و به آساني و سرعت بتوان با آن برنامه نوشت. زبان C# فرزند دو زبان VC++و VBاستC# .از VC++قدرت و دستورات غني و از VB آساني و سرعت برنامه نويسي را به ارث برده است.
قابليتهاي و ويژگيهاي C#
دستورات و ساختار C# كاملا شبيه به C++است و برخي از قسمتهاي C++كه ديگر كاربردي نداشته اند، حذف شده است) مثل ساختارهاي بيتي C# .(امكاناتي را به برنامه نويسان C++ هديه ميكند كه از نبود آنها رنج مي برند C# .كاملترين دستورات و امكانات برنامه نويسي را در مقايسه با ساير زبانها داراست .در اين زبان ساختار و دستورات قديم برنامه نويسي با دستورات و ابداعات نوين برنامه نويسي جايگزين شده اند.
اين زبان همانند C++ به حروف كوچك و بزرگ حساس است .در يك برنامهC# كل دستورات و توابع به طور كامل در دل كلاسها و اشيا قرار دارند C# .به نوع متغير (type-safe) حساس است و انواع جديد و متنوعي از دادهها را پشتيباني ميكند. اين زبان به طور كامل شيءگراست .هر كلاس يا شيء فقط مي تواند يك كلاس پدر داشته باشد .(single inheritance) در C# كلمات كليدي جديدي معرفي شده كه امكان تعريف رويدادها (event) ، رابطها (interface) و بسياري از قابليتهاي جديدي را كه در هيچ زباني ديگري وجود نداشته است، مهيا مي سازد.
برنامه نويس در C# راحت است و با چند دستور و تعريف مي توان برنامه هاي كاربردي مورد نياز را به سرعت فراهم آورد .به همين دليل C#از جمله زبانهاي RAD (Rapid Application Development) شناخته ميشود .از جمله قابليتهاي زبان C# امكان بسط و گسترش راحت و سريع برنامه هاست و به سهولت مي توان نسخه هاي جديدي از يك برنامه نوشته شده به اين زبان را تهيه كرد.
برنامه نويسان Java نيز از امكانات و ويژگيهاي C# لذت خواهند برد. بسياري از دستورات لازم جهت برنامه نويسي نظير داده هاي شمارشي (enum) كه Java فاقد آنها بود در C# گنجانده شده است .به خاطر ساختار بهتر و كاملتر زبان C# و قدرت كامپايلر آن، كد C# سريعتر از كد Java اجرا خواهد شد. Visual C# .Netدر حال حاضر تنها كامپايلر C# است كه توسط مايكروسافت توليد مي شود .يكي از امكانات مفيدي كه VisualC# به برنامه نويسان C# ارايه مي دهد، امكان درج توضيحات بيشتر همراه با جزييات اجزاي برنامه است. در اين صورت مي توان اطلاعاتي كه براي شيء در موقع ساخت تعريف شده را از كامپايلر دريافت كرده و يا در هنگام كامپايل برنامه، خطاهايي كه مثلا مربوط به عدم رعايت قوانين يك شيء است را به كاربر گوشزد كرد .اين دستورات بايد داراي قالب تعريف شده XML باشند C#.تنها زبان Visual Studio .Net است كه اين قابليت را دارد.
از C# مي توان براي نوشتن برنامه هاي تحت ويندوز، توابع كتابخانه اي ويندوز، ساخت كنترل هاي ويندوز، برنامه نويسي در محيط وب، طراح كامل برنامه ها و ابزارها ASP .Netدر وب و همچنين برنامه ها محيط كاراتر استفاده كرد .اين زبان خود شامل توابع و يا كتابخانه خاصي نيست، در عوض به طور كامل و موثر مي تواند از امكانات .Net Frameworkاستفاده كند.
C# در .Net Framework
براي برنامه نويسي در .Net Platformقالب تعيين شده تحت عنوان .Net Framework شناخته ميشود .در اين قالب، تمام كامپايلرهاي زبانهاي برنامه نويسي .Net بايد كدي توليد كنند كه اصول و قوانين تعيين شده را براي توليد كد منسجم و مطمئن (trusted code)رعايت كنند .يكي از مشكلاتي كه در كد توليد شده توسط كامپايلرهاي قبلي وجود داشت اين بود كه كد توليد شده داراي هيچ قالب يكسان نبود .در.Net Framework كامپايلر ابتدا با استفاده از دستورات برنامه:
كد C#را به كدي به زبان MSIL (Microsoft Intermediate Language)ترجمه مي كند و سپس آن را به كد ماشين تبديل خواهد كرد .كد MSIL به راحتي به زبان ماشين تبديل خواهد شد و به همين دليل امكان تست و رفع اشكال (Debugging)برنامه بسيار راحت خواهد بود .با اين شرايط كامپايلر C# يك مترجم (Just in time) JIT است .در سيستم كامپايل به روش JIT برنامه نويس مي تواند هر نقطه اي از برنامه را بلافاصله اجرا كرده و خروجي آن را بررسي كند .براي توليد چنين كدي، كامپايلرها مي بايست يكسري قوانين خاص را رعايت كنند .در .Net Frameworkانواع داده ها تعريف شده است كه امكان جاي دادن تقريبا هر نوع دادهاي را در برنامه ميسر ميسازد .مثل اعداد صحيح 64 بيتي كه عددي به بزرگي 9223372036854775808 را مي توانند نگهداري كنند و يا مقادير حسابي مثل داده اعشاري يا دسيمال كه حتي مي تواند نتيجه بزرگترين عمليات حسابي دنيا را نيز در خود جاي دهد C# .علاوه بر انواع متغيرهاC++ ، متغيرها.Net Framework را نيز به طور كامل پشتيباني مي كند .داده هايي نظير رشته ها (string) در C# تعريف شده است كه علاوه برانعطاف فوق العاده، برنامه نويسانC++را از مشكل كاربرد اشاره گرهاي رشته اي و آرايه هاي كاراكتري رها كرده است .
استاندارد شدن داده ها اين امكان را به برنامه نويسان مي دهد كه به راحتي بتوانند از توابع و كدهاي نوشته شده به زبانهاي ديگر استفاده كنند .اين حركت براي برنامه نويسي اجزاي COM قبلا اجرا شد ولي سرانجام با آمدن .Net انواع متغيرها داراي استانداردي شدند.
كدي كه كامپايلر C# توليد مي كند يك كد سازماندهي شده و قابل مديريت براي .Net Framework است. اين كد به اصطلاح برنامه نويسي Managed code خوانده مي شود. در كد مديريت شده اعمالي نظير مديريت حافظه، ورودي و خروجي، مديريت سيستم، استفاده از منابع سيستم و ....كاملا به عهده سيستم عامل است .كد مديريت شده اين امكان را براي سيستم عامل فراهم ميكند كه اگر برنامه به هر دليل متوقف شود، سيستم عامل به راحتي بتواند آن را از حافظه خارج سازد و مانع از متوقف شدن سيستم (hang)شود .در .Net Platformبرنامه اي تحت عنوان Garbage-Collector تعريف شده كه كار مديريت حافظه را انجام ميدهد .اين برنامه مرتبا حافظه را بررسي كرده و در صورتي كه شيء يا متغير بلا استفادهاي در حافظه موجود باشد، آن را حذف ميكند و حافظه را آزاد مي سازد C# .امكان ميدهد كه برنامه از حداكثر قدرت كامپيوتر كاربر استفاده كند، در عين حال هيچ خطر جدي را براي كامپيوتر كاربر نداشته باشد .به چنين كدي، كد قابل اطمينانtrusted code گفته مي شود.
C#علاوه بر قدرت توليد كد مديريت شده (Managed code)امكان تعريف كد مديريت نشده (Unmanaged code) را نيز فراهم مي سازد .نوشتن چنين كدي به هيچ وجه پيشنهاد نمي شود، زيرا C# امكان برنامه نويسي با اشاره گرهايUnsafe در حالت مديريت شده را دارد و اين نياز به كد مديريت نشده را حذف مي كند. امكاني كه در ساير زبانهاي .Net مثل VB .Net و Jscript .Net وجود ندارند .به طور معمول برنامه نويسان احتياجي به كد مديريت نشده و يا اشاره گرهاي Unsafe ندارند، ولي گاهي لازم است كه به آدرس خاصي از حافظه دسترسي يافت و يا گاهي براي سرعت بخشيدن به اجراي قسمتي از برنامه از اشاره گرهاي زبان C# استفاده كرد.
شايد يكي از مهمترين امكانات .Net Platform اين باشد كه بر مبناي كاراكترهاي Unicode بنا شده است .در سيستم كاراكتريUnicode ، هر كاراكتر به جاي 8 بيت، از 16 بيت استفاده خواهد كرد كه در اين صورت به جاي 256 كاراكتر ميتوان 65536 كاراكتر را كدگذاري كرد .پس با اين احتساب ميتوان حروف تمام زبانهاي زنده دنيا از جمله حروف زبان فارسي را در رشته هاي حرفي قرار داد. بدين ترتيب برنامه نويسان فارسي زبان دغدغه درج حروف و كلمات فارسي را در برنامه هايشان نخواهند داشت .لازم به ذكر است سيستم عاملهاي WinNT Win2000و WinXPبر اين مبنا طراحي شده اند.
در كل .Net Platfrom امكانات فوق العاده اي را براي برنامه نويسان به ارمغان مي آورد كه C# به نحو احسن مي تواند از حداكثر قدرت آن استفاده كند.
آيا C# محبوبيت خواهد يافت
اين پرسشي است كه حتي خود مايكروسافت نيز نمي تواند جواب آن را بدهد .خوب C# يك زبان جديد است و حتي برنامه نويسان با سابقه نيز هنوز در استفاده از آن تازه كار هستند .اين زبان نرم افزاري كه از ابتدا نوشته شده داراي هيچ نسخه قبلي نيست نكته جالب اينجاست كه كامپايلر اين زبان براي مطابقت با ساير زبانهاي.Net ، شماره نسخه اين محصول را عدد هفت نشان مي دهد اكنون حدود يك سال است كه از عمر اين زبان برنامه نويسي مي گذرد و حتي برخي از برنامه نويسان نام آن را نيز نشنيده اند .اگر برنامه نويسان C++يا Javaبا امكانات و قابليتهايC# آشنا شوند، به طور حتم شگفت زده شده و آن را پديده خواهند ناميد .با اين وجود شايد برنامه نويسان VB ساختار VB .Netرا به اين زبان ترجيح دهند .اين زمان و برنامه نويسان هستند كه سرنوشت اين زبان را رقم خواهند زد . قدر مسلم ساير كساني كه با آن آشنا شوند اذعان خواهند كرد كه C# بهترين ابزار براي برنامه نويسي در .Net Platformاست
3 ) مقدمه اي بر معماري ADO.NET
ADO.NET به عنوان بخشي از .NET Framework از هر برنامه اي كه در آن مورد استفاده قرار مي گيرد ،خواه يك فرم ويندوزي ،خواه يك فرم وب و خواه يك آبجكت تجاري سطح مياني، مستقل است. ولي روش فرستادن داده ها به داخل كنترل ها، وظيفه خود كنترل است، نه ADO.NET و معماري ومرتبط كردن داده ها در فرم هاي وب، بر دو فرض استوار است. اولين فرض اين است كه اكثر دستيابي ها به داده ها فقط خواندني است،يعني داده ها به كاربران نمايش داده مي شوند ولي د راكثر موارد توسط آنها تغيير نمي كنند. فرض دوم اين است كه كارايي و Scalability ،در عين حال كه در سيستم عامل ويندوز بي اهميت نيستند ، ولي وقتي كه برنامه ها در اينترنت مورد استفاده قرار مي گيرند، از اهميت حساس و حياتي برخوردار مي شوند.
جهت بهينه سازي كارايي براي دستيابي هاي فقط خواندني به داده ها ،معماري مرتبط كردن داده ها روي فرم هاي وب در .NET Framework ،نيز فقط خواندني است. وقتي كه يك كنترل را به يك منبع داده مرتبط مي كنيد، داده ها فقط به خاصيت مرتبط شده وارد مي شوند ، ولي از كنترل بيرون كشيده نمي شوند. اين بدان معني نيست كه ويرايش داده ها با استفاده از فرم هاي وب، غير ممكن يا حتي بسيار مشكل است.بلكه اين كار بايد به صورت دستي انجام گيرد.
اكثر اين موارد به خاطر طبيعت خود اينترنت است. در يك محيط سنتي برنامه نويسي وب ،يك صفحه ايجاد مي شود و به مرورگر كاربر فرستاده مي شودو بعد كاربر صفحه و هر اطلاعاتي كه در صفحه موجود است، فراموش مي شود. به عبارت ديگر اينترنت به صورت پيش فرض Stateless ( ناپايدار) است و حالت و وضعيت صفحه، بين رفت و برگشت به سرور حفظ نمي شود.
كنترل هاي روي فرم وب، نيز مانند كنترل هاي روي فرم ويندوزي، نه تنها مي توانند به جدول هاي پايگاه داده مرتبط شوند، بلكه مي توانند به هر منبع داده اي ديگري نيزمتصل شوند.از آنجايي كه مديريت منابع سرور و مسائل Scalability حاصله ،در محيط اينترنت بسيار مهم و حساس است، بايد به انتخاب روش هاي دستيابي به داده توجه زيادي كرد. در اكثر موارد ،وقتي كه داده هايي خوانده مي شوند و به داخل صفحه آورده مي شوند و بعد از دست مي روند، بهتر است به جاي DataSet از يك DataReader استفاده كرد، زيرا DataReader كارايي بهتري دارد و حافظه سرور را حفظ مي كند. ولي هميشه اين طور نيست و شرايطي وجود دارد كه در آن ، استفاده از يك DataSet ، هم ساده تر و هم كارآمدتر است.براي مثال ، اگر با داده هايي مرتبط به هم كار مي كنيد، آبجكت DataSet با پشتيباني از DataRelations و متدهاي GetChildRows , Get ParentRows ، هم آسانتر پياده سازي مي شود و هم كارآمدتر است، زيرا مستلزم رفت و برگشت كمتري به منبع داده است. همچنين DataSet ، مكانيزمي براي خواندن و نوشتن داده ها از/ ونوشتن داده ها به يك XML stream دارد.سرانجام اگر داده چندين بار مورد دستيابي قرار بگيرد ، مثلاً وقتي داده ها را يكي يكي مي بينيد، كارآمدتر است كه به جاي اينكه هر بار DataSet را ايجاد كنيد، آن را ذخيره كنيد. البته هميشه اين طور نيست. در بعضي شرايط ،حافظه اي براي كه براي ذخيره سازي يك DataSet بزرگ لازم است، كارايي بدست آمده از نگهداري داده ها را تحت الشعاع قرار مي دهد. همچنين اگر داده اي كه ذخيره مي شود فرار باشد، اين خطر وجود دارد كه داده هاي ذخيره شده هماهنگي خود را با منبع داده اوليه از دست بدهند.يك تفاوت ديگر نيز بين معماري مرتبط سازي داده ها د رفرم هاي ويندوزي و فرم هاي وب ، وجود دارد. فرم هاي وب مستقيماً از مرتبط سازي داده ها به يك آبجكت DataRelation پشتيباني نمي كنند. براي انجام همين كار در يك فرم وب، بايد از خاصيت DataBinder استفاده كرد.
مرتبط كردن كنترل ها به يك منبع داده ADO.NET
كنترل هاي فرم وب از مرتبط كردن ساده (simple-binding) تقريباً هر خاصيتي به يك مقدار در منبع داده و مرتبط كردن پيچيده (complex-binding) خاصيت هاي كنترل كه چندين مقدار را نمايش مي دهند، پشتيباني مي كنند.كنترلهاي فرم وب، هميشه مي توانند در زمان اجرا مرتبط شوند و اگرمنبع داده در دسترس باشد، در زمان طراحي نيز، مي تواند مرتبط شود.( از آنجايي كه برنامه هاي فرم وب ،بيشتر به جاي DataSet از DataCommand استفاده مي كنند،( منبع داده در اكثر مواقع در زمان طراحي در دسترس نيست.)كنترل هاي فرم وب كه به صورت ساده مرتبط شده اند، بر خلاف كنترل هاي فرم ويندوزي ، خاصيت هاي مربوط به مرتبط سازي را ندارند ، بلكه مقدار در زمان اجرا و با استفاده از يك عبارت مرتبط سازي داده ،به صورت صريح از خاصيت گرفته مي شود و يا به آن اختصاص داده مي شود.در Studio.NET Visual ، پنجره Prorerties ، ابزاري براي ايجاد عبارت هاي مرتبط سازي دارد و نيز مي توانيم آنها را در زمان اجرا ايجاد كنيم. عبارت مرتبط سازي داده ها در زمان اجرا، با #%> و <% مشخص مي شوند:
PropName = ( <%# dataExpression %>)DataExpression ، مي تواند هر عبارتي باشدكه به يك آيتم داده يعني يك ستون از يك DataRow ، يك خاصيت از كنترل ديگر روي صفحه ، يا حتي يك عبارت تبديل تبديل مي شود.ولي بايد توجه داشته باشيم كه فرم هاي وب، آبجكت BindingContext يا هر چيزي شبيه آن را ندارد، بنابراين سطر جاري، معني ندارد. وما بايد دقيقاً مشخص كنيم كه كدام سطر از يك منبع داده ، مثل يك DataTable در خاصيت مرتبط شده نشان داده خواهد شد.بنابراين ، براي مثال براي اشاره كردن به يك DataCloumn در يك DataSet ، بايد از دستور زبان زير استفاده كنيم:
<%# myDataSet.myTable.DefaultView(0).myColumn %>
تا زمانيكه عبارت موردنظر، در زمان اجرا به نوع داده درستي تبديل شود، ميتوانيم از تبديل نوع استفاده كنيم تا از نوع صحيحي از داده استفاده كنيم. براي مثال :
myTextBox.Text = <%# myDataSet.myTable.Rows.Count.Tostring() %>
مرتبط كردن ساده يك خاصيت كنترل در زمان طراحي
در فرم مورد نظر بعد از انتخاب مثلاً يك TextBox ، در پنجره Properties ، (DataBinding) را انتخاب مي كنيم و بعد روي دكمه (…) كليك ميكنيم تا پنجره مربوطه باز شود. در پنجره Simple Binding فيلد موردنظر را انتخاب كرده ،دكمه ok راكليك ميكنيم تا binding انجام شود.اگر منبع داده در زمان طراحي در دسترس نباشد، مي توانيم خاصيت كنترل را در زمان اجرا مرتبط كنيم. اگر انجام اين كار در تگ مربوط به كنترل ممكن است، انجام اين كار با استفاده از رويداد Data binding كه در هنگام فراخواني متد Data bind براي كنترل رخ مي دهد، بسيار ساده تر است.
مرتبط كردن ساده يك خاصيت كنترل در زمان طراحي
بعد از انتخاب مثلاً يك TextBox ، در پنجره Property روي دكمه Event كليك ميكنيم و بعد Data binding رادوبار كليك مي كنيم تا اداره كننده رويداد اضافه شود. وكد زير را به رويه اضافه مي كنيم :
this.myTextBox.Text = this .myDataSet .myTable[0] .myField;
وقبل از اينكه بتوايند داده هاي روي فرم وب را نمايش دهيم ،بايد با پر كردن يك DataAdapter يا اجراي يك DataCommand صريحاً آنها را از منبع داده بار كنيم . و نيز بايستي داده ها را به خاصيت هاي كنترل وارد كنيم.
اين كار را ميتوان با فراخواني متد DataBind كه به وسيله تمام كنترل هايي كه از System .Web .Control ارث مي برندپياده سازي مي شود انجام داد. راخواني متد DataBind موجب فراخواني متد DataBindدر كنترل هاي فرزند آن نيز مي شود. بنابراين ، فراخواني DataBind از كلاس Page ، باعث فراخواني متد DataBind از تمام كنترل هاي كلاس Page مي شود.
وقتي كه از متد DataBind يك كنترل ،مستقيماً و يا با فراخواني متد DataBind پدر فراخواني مي شود ، عبارت هاي داده اي موجود در تگ هاي كنترل، تبديل مي شوند و رويدادهاي DataBinding مربوط به كنترل ها روي مي دهند.
اگر مي خواهيم از يك فرم وب براي بروز رساني داده ها استفاده كنيم،بايد در هنگام فراخواني متد DataBind دقت كنيم. DataBind ،مثل متد AcceptChanges آبجكت DataSet ، مقاديري كه در حال حاضر در خاصيت هاي مرتبط شده وجود دارند را جايگزين مي كنند .
نمايش داده هاي مرتبط شده در صفحه
در ويرايش گر كد، كد زير را به رويداد Page_Load اضافه مي كنيم :
this. myDataAdapter. Fill ( this. myDataSet. myTabel );
this.DataBind();
مرتبط سازي پيچيده خاصيت هاي كنترل
كنترل هايي كه به صورت پيچيده مرتبط شده اند، در هر محيط،خاصيت هاي DataSource و DataMember را براي تعريف منبع داده دارند و نيز كنترلهاي فرم وب، يك خاصيت DataValueField را دارند كه معادل خاصيت ValueMember در يك كنترل فرم ويندوزي است.كنترل هاي DataList و DataGrid همچنين خاصيتي به نام DataKeyField دارند كه اطلاعات مربوط به كليد اصلي را در منبع داده نگه مي دارند. اين خاصيت، كه مجموعه DataKeyFields را پر مي كند،به ما امكان مي دهد تا بدون اينكه لزوماً اطلاعات كليد اصلي را در يك كنترل نمايش دهيم، آن را ذخيره كنيم.
به علاوه ،كنترل هاي ListBox , DropDownList , CheckBoxList , RadioButtonList , HtmlSelectخاصيتي به نام DataTextField دارند كه ستوني را كه بايد نمايش داده شود را مشخص مي كند. اين خاصيت، معادل خاصيت DisplayMember در يك كنترل فرم ويندوزي است.
اگر خاصيت DataSource به يك DataSet و خاصيت DataMember به يك DataTable مقداردهي شود، مي توانيم به راحتي خاصيت را مستقيماً مقداردهي كنيم.
مرتبط سازي پيچيده يك كنترل در زمان اجرا
رويداد SelectedIndexChanged را به ويرايشگر كد با كد زير اضافه مي كنيم:
this.myDataView.Tabel = this.mtDataSet.mtTable;
this.myDataView.RowFilter = “my Field Name “+this.mydataGrid.SelectedItem.Cells[1].Text;
this.mylistBox.DataSource = this.myDataView;
this.mylistBox.DataTextField = "myFieldname";
this.mylistBox.DataBind();
استفاده از آبجكت DataBinder
علاوه بر قرار دادن مستقيم عبارت هاي مرتبط سازي داده ها در HTML Stream ، .NET Framework آبجكت DataBinder را ارائه مي كند كه عبارتهاي مرتبط سازي داده ها را ارزيابي مي كندو به صورت اختياري نتيجه رابه صورت يك رشته فرمت دهي مي كند. نحوه كار DataBinder بسيار ساده است و مي تواند تبديل نوع را به صورت خودكار انجام دهد كه اين امر، عمل كدنويسي را در بعضي شرايط ساده مي كند، مخصوصاً وقتي كه با يك آبجكت ADO.NET كار مي كنيد وچندين تبديل نوع لازم است و دستور زبان ، پيچيده است. ولي آبجكت DataBinder ديرهنگام ،مرتبط مي شود و مثل تمام آبجكت هايي كه ديرهنگام مرتبط مي شوند، ومخصوصاً به خاطر تبديل نوع ، باعث پايين آمدن كارايي مي شود.اين آبجكت ،يك آبجكت ايستا است ،يعني ميتواند بدون نمونه سازي به كارگرفته شود. اين آبجكت مي تواند يا از داخل HTML صفحه ( كه با #%> و <% مشخص مي شود) و يا در كد فراخواني شود.
اين آبجكت هيچ خاصيتي يا رويدادي ندارد و فقط يك متد Eval دارد. اين متد Overload شده تا يك رشته فرمت دهي اختياري را قبول كند.
حفظ وضعيت آبجكت ADO.NET
از آنجايي كه فرمهاي وب،بين رفت و برگشت از server ،وضعيت را حفظ نمي كنند، اگر بخواهيم كه يك DataSet را بين زماني كه صفحه ايجاد مي شود و زماني كه طول مي كشد تا كاربرآن را با تغييرات برگرداند حفظ كنيم ،بايد اين كار را به طور صريح انجام دهيم.
ما مي توانيم يك DataSet را روي Server ،با ذخيره كردن آن يا در وضعيت Application ويا در وضعيت Session ذخيره كنيم و يا مي توانيم آن را روي client و با ذخيره كردن آن در ViewState كلاس Page حفظ كنيم . همچنين مي توانيم يك DataSet را در يك فيلترhidden در صفحه حفظ كنيم .اگرچه از آنجاييكه اين روش همان روشي است كه كلاس Page ،ViewState را پياده سازي مي كند، به ندرت مزيتي در انجام آن وجود دارد.
حفظ آبجكت هاي ADO.NET بر روي سرور
ADO.NET چند مكانيزم براي حفظ حالت در يك برنامه اينترنتي دارد.در سمت سرور، دو تا از ساده ترين مكانيزم ها براي استفاده، حالت Application وحالت Session هستند. اين دوساختار حالت،فرهنگهايي هستندكه داده ها را به صورت جفت هاي اسم/مقدار نگهداري ميكنند. مقدار به عنوان يك آبجكت ذخيره و بازيابي مي شود،بنابراين وقتي كه آن را بازيابي مي كنيد،بايد آن را به نوع درست تبديل كنيد. هر دو حالت به طور يكساني استفاده ميشود و تفاوت فقط در محدوده(Scope) است.
حالت Application براي تمام صفحه ها وتمام كاربران يك برنامه قابل دسترسي است. ولي حالت Session ، مخصوص يك Session مرورگر است.
ذخيره يكDataSet در حالت Session
Page-Load را به صورت زير تغيير مي دهيم تا DataSet در حالت Session نگهداري شود.
If ( this.IsPostBsck )
This.mydataSet = (DataSet) Session[ “ dataSet”];
Else
{
this. mydataSet.Fill( this.mydataSet.myTable );
this.Session[] = this. mydataSet;
}
this.DataBind();
بهنگام سازي يك منبع داده از طريق فرم وب
بهنگام سازي واقعي به وسيله اجراي مستقيم يك DataCommand ويا با فراخواني متد Update آبجكت DataAdapter انجام مي شود. اما بايد توجه داشت كه يك صفحه فرم وب حالت خود را حفظ نمي كند ومعماري (ساختار) مرتبط سازي يكطرفه است. بنابراين بايد مقاديري راكه بوسيله صفحه برگردانده مي شوند را در آبجكتي مناسب وارد كنيم. در يك فرم وب ،بايد صريحتاً مقدار را از يك كنترل بگيريد وآبجكت ADO.NET را بروز رساني كنيم.
كد زير را به اداره كننده رويداد اضافه مي كنيم :
system.Data.OleDbCammand cmdUpdate;
cmdUpdate = this.myDataAdapter.UpdateCommand;
cmdUpdate.Parameters[0].Value = this.TextBox1.Text;
cmdUpdate.Parameters[1].Value = this.TextBox2.Text;
cmdUpdate.Parameters[2].Value = this.TextBox3.Text;
this. myConnection.Open();
cmdUpdate.ExecuteNonQuery();
this.cnNorthWind.Close();
استفاده از كنترل هاي وب
فرم هاي وب ASP.NET دو كنترل را عرضه مي كنندكه مخصوص نمايش داده طراحي شده اند: يعني DataGrid , DataList . هر دو اين كنترل ها سطرهاي يك منبع داده را نمايش مي دهند،اما قابليتهاي آنها متفاوت هستند.
كنترل DataGrid داده را دريك قالب جدول بندي شده نمايش مي دهدوپشتيباني دروني از ويرايش و صفحه بندي داده را به صورت درجا به عمل مي آورد،اما قابليت هاي قالب بندي نسبتاً محدودي دارد. كنترل DataList ، هم پشتيباني دروني براي ويرايش درجا به عمل مي آوردو هم قالب بندي انعطاف پذيري بيشتري را مجاز مي دارد.
Microsoft .Net Framework ،همچنين يك كنترل تكراركننده را پشتيباني مي كندكه قابليت قالب بندي تقريباً نامحدودي را مجاز مي دارد،اما در نماي Design از PageDesigner پشتيباني محدودي به عمل مي آورد-بيشتر قالب بندي بايد مستقيماً در نماي Html از PageDesigner صورت گيرد.
اين سه كنترل همگي الگوها(Template) را مورد حمايت قرار مي دهند، كه مجموعه هايي از كنترل ها هستند كه محتويات هر بخش از كنترل را تعيين مي كنند.
براي مثال ،كنترل DataGrid يك AlternatingItemTemplate را مورد پشتيباني قرار نمي دهد وItem Templates آن محتويات يك ستون را تعيين ميكند. درحاليكه ItemTemplate براي يك DataList محتويات يك سطر را تعيين مي كند.
DataGrid با استفاده از خصوصيات DataSource ,DataMember به يك DataSourse متصل است ويك ساختار پيش فرض دارد وليDataList هيچ ساختاري به خود نمي گيرد و نيازمند اين است تا بخش ItemTemplate را پيش از آنكه بتواند داده اي را نمايش دهد ، مشخص كنيم.
معتبرسازي فرم وب
Framework .Net تعدادي از كنترل هاي معتبرسازي كه مي توانند براي معتبرساختن داده به كار روند را مورد پشتيباني قرار مي دهد. كنترل هاي فرم وب اعتبار را چك ميكنند وهرگونه پيغام خطا را نمايش مي دهند. هر كنترل اعتبار يك شرط منفرد را در روي صفحه چك مي كند،كه به عنوان ورودي شناخته مي شود. براي چك كردن شرايط متعدد، كنترل هاي معتبر متعددي مي توانند به يك كنترل ورودي اختصاص يابند.اين حالت چون تمام كنترل ها بجز RequiredFieldValidator يك فيلد خالي را براي اعتبارسنجي در نظر مي گيرند،اتفاق مي افتد.
اگر مرورگر ازDHTML پشتيباني مي كند، معتبرسازي اول روي سرويس گيرنده رخ خواهد داد، و فرم تا زماني كه تمام شرايط محيا نشوند، تاييد نخواهد گرديد. معتبرسازي چه روي Client رخ داده باشد يا رخ نداده باشد، همواره هنگام پردازش يك رويداد Click بر روي سرويس دهنده رخ خواهد داد. به علاوه مي توان يك متد Validate آبجكت Control را به صورت دستي براي معتبرسازي محتويات آن از كد فراخواني نماييم.
هنگامي كه صفحه معتبرسازي مي شود،محتويات كنترل ورودي به كنترل اعتبارسنجي انتقال مي يابند كه محتويات را تست مي كند و خصوصيت IsValid كنترل را روي False قرار مي دهد. اگر دو كنترل غير معتبر باشند،خصوصيت IsValid صفحه نيز روي False ،تنظيم مي گردد. ما مي توانيم اين شرط را چك كرده و هر عملي كه لازم است را انجام دهيم.
4 ) امنيت در ASP.NET
اهميت امنيت
امنيت يكي از نخستين جوانبي است كه توسعه دهنده وب هنگام طراحي و پياده سازي يك برنامه كاربردي درباره اش فكرمي كند (اگر هم نيست , حتما بايد باشد) در هر صورت ,طراحي يك برنامه كاربردي بدون در نظر گرفتن امنيت , همانند طراحي يك برنامه كاربردي بدون امنيت است.افزودن امنيت به يك برنامه كاربردي پس از اينكه كارهاي اجرايي توسعه آن پيشرفت كرد , بسيار دشوار خواهد شد .
سطوح انواع متفاوت امنيت وجود دارند . سطح ونوع امنيت مورد نياز برنامه كاربردي شما بسته به كاري كه برنامه كاربردي شما انجام مي دهد , نوع ومقدار داده اي (اگر داده اي وجود داشته باشد) كه شما ذخيره مي كنيد , ريسكي كه متحمل مي شويد و مدت زمان , زحمت وپولي كه صرف داشتن يك برنامه كاربردي امن ميكنيد , متفاوت است . نيازهاي امنيتي يك صفحه خانگي شخصي براي مثال تفاوت فاحشي با صفحات خانگي سايتهاي اينترنت يا تجارب الكترونيكي خورده فروش داردند.
مقدمات امنيت
• برپايي سرويس دهنده وطراحي برنامه كاربردي : جلوگيري ازسوءاستفاده ازسرويس دهنده وب ويا داده به دليل تنظيمات ناامن سرويس دهنده وطراحي ضعيف برنامه كاربردي.
• Patching (ترميم ) :جلوگيري از مورد سوءاستفاده قرارگرفتن سرويس دهنده وب به دليل آسيب پذيري هاي كه درنرم افزارسرويس دهنده وجود دارد .
• كنترل دسترسي :جلوگيري ازمورد سوء استفاده قرارگرفتن سرويس دهنده وب به دليل تنظيمات نامناسب دسترسي .
• Auditing and Logging : رد گيري اينكه چه كسي وچه زماني به سايت شما حمله مي كند و اصلا چه كاري مي كند.
• استفاده از SSL وديگر ابزارهاي امنيتي رمزنگاري : جلوگيري از سوء استفاده كردن از دادها .
برپايي سرويس دهنده وطراحي برنامه كاربردي
يكي از اولين عواملي كه بايد روي آن تمركز كرد روش برپاكردن سرويس دهنده است. طراحي يك برنامه كاربردي كه تاييد اعتباروصدورمجوزها را بطور مناسب پياده سازي ميكند , براي كسي كه مي تواند تمام آن تدابير امنيتي را با نفوذ ازطريق آسيب پذيري هايي كه patch (برنامه ترميمي ) راروي آن اعمال نكرده ايد , پشت سر گذارد كار دشواري است.
انتخاب يك سيستم عامل (OS)
هنگامي كه شمايك سيستم عامل را انتخاب مي كنيداولين سوالي كه ازخودمي پرسيداين است كه تاچه حدازامنيت را لازم داريد همانند مسائل ديگر مربوط به طراحي يك برنامه كاربردي, نسبت مستقيم بين ايجاد امنيت و هزينه وجود دارد .