ارسال ایمیل در ASP.NET با استفاده از HTML Template

آیا تاکنون سعی کرده اید برای سایت خود خبرنامه ایجاد کنید؟ آیا تاکنون وسوسه شده اید که سیستمی طراحی کنید که در صورتی که بینندگان سایت شما نظرات خود را در سایت شما وارد کنند برای آنها یک Email تشکرآمیز ارسال کنید؟ آیا می دانید ساختن یک HTML Template زیبا برای خبرنامه شما و استفاده همیشگی از آن جهت ارسال خبرنامه در ASP.NET بسیار ساده صورت می گیرد؟ چنانچه سوالات بالا شما را به دانستن بیشتر ترغیب کرده است به شما تبریک می گویم! چرا که در ادامه این مقاله شما روش بسیار ساده ارسال Emailهای HTML زیبا را بدون اینکه نگران چگونگی کدنویسی HTML متغیر رشته ای Body در MailMessage باشید را فرا خواهید گرفت.
برای شروع بیایید به روش کار نظری بیاندازیم: خوب احتمالا شما با روش ساختن یک نمونه از آبجکت MailMessage که در ASP.NET برای ارسال Email استفاده می شود آشنایی دارید (اگر این چنین نیست در ادامه مقاله به طور اجمالی توضیحاتی ارائه شده است) تنها قسمتی که باید مورد توجه قرار دهید این است که چگونه می توانیم Body نامه خود را به فرمت HTML و بدون نیاز به اینکه تمامی تگها را پشت سر هم در یک رشته طولانی و سردرگم کننده تایپ کنیم، درآوریم. یک ایده جالب این است که ما Template نامه خود را با استفاده از ادیتورهای WYSIWYG مثل FrontPage یا Dreamweaver طراحی کنیم و سپس تمامی کدهای HTML آن را درون یک متغیر رشته ای Import کرده و از آن استفاده کنیم. این کار بسیار آسان است. اما می توان این نامه را برای هر کاربر کمی سفارشی (Customize) کرد! برای مثال شما می توانید در ابتدای نامه کاربر را با نام وی مورد خطاب قرار دهید. بهتر است از این پس توضیحات را همراه با کدنویسی دنبال کنیم. (کلیه کدهای Server Side به زبان VB.NET نوشته شده است) سه گام اساسی برای این کار وجود دارد:
1- ساختن Template مورد نظر شما جهت ارسال Email:
برای این کار کافی است که Template مورد نظر خود را به فرمت HTML طراحی کنید. این به خود شما بستگی دارد که کدهای HTML را به صورت دستی بنویسید و یا از ادیتورهای WYSIWYG مانند FrontPage یا Dreamweaver یا !GoLive استفاده کنید. تنها تفاوتی که در اینجا وجود دارد این است که شما بایستی قسمتهایی از متن نامه خود را که متغیر هستند (مانند نام گیرنده Email، آدرس پست الکترونیکی وی و ...) را به گونه ای از بقیه قسمتها متمایز کنید. برای مثال اگر شما می خواهید در ابتدای نامه، دریافت کننده نامه را با نام خود مورد خطاب قرار دهید عبارت را به صورت زیر وارد کنید: "سلام "#NAME# لطفا توجه کنید که هیچ محدودیتی در تکنیک به کار رفته وجود ندارد و قرار دادن کاراکترهای ## فقط جهت متمایز ساختن این قسمت از محتوای استاتیک صفحه است و شما می توانید به صور دیگر آن را مشخص کنید مثلا ?NAME? یا هر چیز مشابه دیگر. این قسمت بعدا با نام شخص مورد نظر ما جایگزین می شود. نکته قابل ذکر دیگر اینکه چنانچه قصد دارید نامه خود را فارسی ارسال کنید تگ زیر را فراموش نکنید:

2- خواندن فایل Template جهت قراردادن در Body نامه شما:
پس از اینکه Template را آماده نمودید بایستی این فایل را بخوانید، قسمتهای مورد نظر (متمایز شده با ##) را با عبارات مورد نظر خود (که می توانید از Database استخراج کنید) جایگزین کنید و این متن را به صورت یک متغیر رشته ای در Body نامه خود قرار دهید (گام 3). این کار به وسیله کد زیر صورت می پذیرد: (قبل از هر چیز شما بایستی Namespace مورد نیاز که در اینجا System.IO می باشد را Import کنید)
Imports System.IO
Dim reader As StreamReader
Dim strFileName As String = Server.MapPath("templatel.htm")
Dim strFileText
reader = File.OpenText(strFileName)
While reader.Peek <> -1
strFileText += reader.ReadLine()
End While
reader.Close()
strFileText = Replace(strFileText, "#Username#", Name.Text)
strFileText = Replace(strFileText, "#MsgID#", Request("MsgID"))
strFileText = Replace(strFileText, "#AuthorID#", Request("AuthorID"))
حال بیایید نگاهی به کد فوق بیاندازیم: در سطر اول شما یک شی از نوع StreamReader که جهت خواندن فایلهای متنی به کار می رود را می سازید و در سطر بعدی مسیر فیزیکی فایل Template خود را در متغیر رشته‌ای strFileName ذخیره می کنید.
نکته: در صورتیکه بخواهید در فایل کلاس خود از کد فوق استفاده کنید بایستی مسیر فیزیکی فایل را با استفاده ازSystem.Web.HttpContext.Current.Server.MapPath("template.htm") به دست آورید. اما در Code Behind یک WebForm همان Server.MapPath() کافی است.
سپس در سطر بعدی ما با استفاده از متد OpenText فایل مورد نظر را باز کرده و متن آن را در Reader قرار می دهیم. حال در یک حلقه While...End While سطر به سطر فایل Template را (که در اینجا کدهای HTML ما هستند) می خوانیم و در متغیر strFileText ذخیره می کنیم. Reader.Peek <> -1 بررسی می کند که آیا به انتهای فایل رسیده ایم یا خیر. پس از اینکه کل فایل را خوانده و در متغیر ذخیره کردیم. شی reader را می بندیم.
در اینجا شما باید Template نامه خود را برای کاربر خاص Customize کنید. یعنی عبارات محصور شده با ## را با اطلاعات کاربر (که از بانک اطلاعاتی استخراج می شود و یا از یک Query String دریافت می شود) جایگزین کنید. در مثال بالا مقدار اول در Template با مقدار یک Textbox و دو مورد بعدی با Query String های انتهای یک URL جایگزین می شود.
حاصل کار یک متغیر رشته ای به نام strFileText است که حاوی کد HTML مورد نیاز شما برای ارسال یک HTML Email می باشد. که مثلا عبارت ابتدای آن به صورت زیر در آمده است: "سلام مهدی"
3- استفاده از قالب Import شده فوق و ارسال Email:
حال به آسانی Email را ساخته و ارسال می کنیم. بدین ترتیب: (Imports System.Web.Mail را فراموش نکنید!)
'Creating and sending mail to user
Dim objMail As New MailMessage()
objMail.From = "You@YourDomain.com"
objMail.To = Email.Text.Trim
objMail.Subject = "YOUR SUBJECT GOES HERE..."
objMail.BodyFormat = MailFormat.Html
objMail.BodyEncoding = System.Text.Encoding.UTF8
objMail.Body = strFileText
SmtpMail.SmtpServer = "smtp.YOURSERVER.com"
SmtpMail.Send(objMail)
این قسمت نیاز به توضیخ چندانی ندارد. جز اینکه objMail.To را بایستی به صورت داینامیک (از DB و ...) تغییر دهید (در اینجا مقدار از یک Textbox دریافت شده است)، SMTP Server خود را مشخص کنید و Email را ارسال کنید! به همین سادگی. بقیه موارد بسیار واضح هستند.
لطفا به این نکته توجه کنید که برخی SMTP Serverهایی که نیاز به Authentication دارند را نمی توان برای این منظور (ارسال Email به آدرس های خارج از SMTP Server فوق) مورد استفاده قرار داد. در این خصوص لطفا به Administrator سرور خود رجوع کنید.

مقدمه و معرفي 
در اين دوره ي آموزشي ، فرض ما بر اين است كه شما دوستان با html و تا حدي هم اسكريپت نويسي (vbs و js) آشنا هستيد و احتمالا صفحات وبي را هم طراحي نموده ايد . قصد ما اين است كه شما را با تكنولوژي asp كه كاربرد فراواني در طراحي سايتها و صفحات حرفه اي تر دارد آشنا كنيم . پس از مطالعه ي اين دوره شما ميدانيد ASP چيست چه كاربردي دارد و چگونه مي توانيد يك برنامه ي كاربردي (يك سايت) بنويسيد كه از اين تكنولوژي استفاده مي كند . صفحات سرويس دهنده فعال(Active Srerver Pages) يك تكنولوژي در زمينه برنامه نويسي در سرويس دهنده ها مي باشد كه توسط شركت مايكروسافت براي ايجاد صفحات HTLM پويا در اينترنت وشبكه هاي داخلي (interanet)طراحي شده است .
 ASP  چيست ؟بر خلاف HTML ،  ASP يك زبان نيست ، يك برنامهُ كاربردي مثل FrontPage  يا Word‌ هم نيست ؛ بلكه ASP يك تكنولوژي براي ساخت صفحات وب پويا است .ASP بر اين اساس بنا شده است كه با  HTML براي ايجاد صفحات وب پويا استفاده شود. در حقيقت ASP‌ كدهاي HTML را ايجاد مي نمايد. به طور كلی يك صفحهُ ASP‌ از سه قسمت زير تشكيل ميشود : (SomePage.asp)
1) متون ساده ای كه به طور مستقيم در صفحة نمايش نشان داده مي شوند .
2) كد های  HTML كه براي مرورگرچگونگی نمايش متن را تعيين می كنند. اين كدها بين دو علامت < > قرار می گيرند و در سمت سرويس گيرنده اجرا می شوند و به آنها تگ گفته مي شود .
3) معمولاً قسمتی هم كد ASP . اين كدها بين دو علامت قرار می گيرند و در سمت سرويس دهنده اجرا می شوند .
ويژگي هاي منحصر به فرد ASP كه در يك HTML ساده نمي توان به آن دست يافت عبارتند از :
· مي توانيد كدهايي بنويسيد كه در سرويس دهنده ي وب اجرا شود .
· اشيائي دارد كه با استفاده از آنها كارهاي زيادي مي توانيد انجام دهيد مثل Request ، Response و غيره كه در قسمتهاي بعدي آنها را شرح مي دهيم .
· مي توان با استفاده از اشياء اكتيوايكس قابليتهاي ASP را گسترش داد .
· با استفاده از ASP مي توانيد اطلاعات مورد نظر خود را با پايگاه داده هاي مختلف (مثل Access يا SQL Server و ... رد و بدل كنيد)
به طور كلي مي توان گفت محدوديتي در اين كه چه كاري با ASP مي توانيد انجام بدهيد نداريد و تقريبا هر سايت وبي كه امروزه در اينترنت وجود دارد با ASP قابل انجام است . 
كارهايي كه ASP مي تواند انجام دهد ولي HTML نمي تواند :1. با بروز درآوردن (update) يك  فايل متني يا محتويات يك پايگاه داده مي توان صفحات وب رابدون نوشتن كد HTML ي ويرايش كرد .
2. ساختن صفحات وب در جهت علاقه كاربرد
3. اطلاعات را از فرمها دريافت و در يک پايگاه داده ذخيره نمايد .
4. ساختن صفحات تبليغاتی با استفاده از يك مجموعه اشكال گرافيكي مختلف .
5. يک شمارنده صفحه ايجاد نمايد .
6. گرفتن ورودي از كاربر ، و برگرداندن اطلاعات به همان كاربر با توجه به اطلاعات دريافتي
7. و .... 
تفاوت اصلي HTML محض با ASP در اينست كه HTML روي مرورگر تفسير يا ترجمه مي شود و روي سرويس دهنده اجرا نمي شود ، در حاليكه ASP روي سرويس دهنده اجرا مي شود و حسن آن در اينجاست كه با نوشتن كدي كه روي سرويس دهندهُ وب اجرا مي شود ، به امكانات بيشتري دست خواهيد يافت .
 

بررسی نحوه ذخیره سازی Resource ها در اسمبلی های .NET

net Assembly توانائی ذخیره سازی منابع اضافه شده به برنامه ها ، از قبیل اطلاعات متنی و تصاویر مورد نیاز برنامه را دارد .
در حالت عادی ما به تصاویر یا متن های مورد نیازمان از طریق فایل های روی هارد دیسک دسترسی داریم ، اما گاهی اوقات نیاز دارید که برنامه از منابع خارجی که درون خودش ذخیره کرده استفاده کند. در این صورت شما هنگام توزیع برنامه دیگر نگرانی درباره مسیر فایل های مورد نیاز آن که هنگام نصب برنامه از کاربر درخواست می شود را ندارید.

حال طریقه استفاده از .net Assembly را شرح می دهیم:
ابتدا مراحل زیر را صورت دهید.
۱- یک پروژه جدید ایجاد کنید.
۲- در Solution Explorer بر روی نام پروژه کلیک راست کرده و سپس روی گزینه Add Existing Item کلیک کنید.
۳- در پنجره Open نوع فایل را به All Files تغییر دهید.
۴- پس از انتخاب فایل ها روی آنها کلیک راست کرده و Properties را انتخاب کنید.
همانطور که می بینید مقدار اولیه خصوصیت Build Action مربوط به فایل ، Content میباشد که باید به Embedded Resource تغییر کند.

حال فایل های انتخابی شما بخشی از .Net Assembly هستند.
فراخوانی و نحوه استفاده از فایل های اضافه شده :
فرض می کنیم که شما یک تصویر با نام ۱/bmp و یک فایل متنی با نام Test.txt را به برنامه وارد کرده اید.ما این دو فایل را در رویداد Form_Load فراخوانی و نمایش می دهیم.
ابتدا System.IO را در برنامه Import کنید:
Imports System.IO
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
‘Assembly تعریف متغیری از نوع
Dim asm As System.Reflection.Assembly = _
Me.GetType.Assembly.GetEntryAssembly

Dim my_namespace As String = _
asm.GetName().Name.ToString
‘String به متغیری از نوع Assemblyنسبت دادن نام

Dim pic_stream As Stream
Dim bt As Bitmap

pic_stream = _
asm.GetManifestResourceStream(my_namespace + “.1.bmp”)

If Not pic_stream Is Nothing Then
bt = New Bitmap(pic_stream)

Dim pbox As New PictureBox()
‘به آن Image و نسبت دادن PictureBox ساخت
With pbox
.Image = bt
.Left = 600
.Top = 200
.Width = 200
.Height = 200
.Visible = True
End With

Me.Controls.Add(pbox)
pic_stream.Close()
End If

Dim text_stream As Stream = _
asm.GetManifestResourceStream(my_namespace _
+ “.test.txt”)

If Not (text_stream Is Nothing) Then
Dim stream_reader As New StreamReader(text_stream)

Dim lbl As New Label()
‘در آن Test.txt و قرار دادن محتویات فایل Lable ساخت یک
With lbl
.Text = stream_reader.ReadToEnd()
.Top = 75
.Left = 5
.Width = 500
.Height = 500
.Visible = True
End With

Me.Controls.Add(lbl)
stream_reader.Close()
End If
End Sub

آموزش ASP عملگرهای VBScript

در این مقاله در مورد عملگرها بحث خواهیم نمود که جزئی از مهم ترین و پرکاربرد ترین مباحث VBScript میباشد. عملگرها به ما اجازه می دهند که با داده ها کار کنیم و آنها را ترکیب کنیم تغییر دهیم و یا جایگزین کنیم. ۵ کلاس اصلی از عملگر ها وجود دارند که ما در مورد آنها بحث خواهیم کرد. اولین نوع آنها عملگر انتساب(Assignment) میباشد که اکنون آن را ملاحظه خواهیم نمود:
● عملگر انتساب
ما در مورد متغیرها بحث کردیم و توضیح دادیم که داده ها در آنها ذخیره می گردند. اما درباره این که چگونه داده ها در متغیر ها ذخیره می شوند توضیحی داده نشد.عادی ترین راه برای ذخیره داده های متغیرها استفاده از عملگر انتساب می باشد. عملگر انتساب در VBScript علامت مساوی (=) می باشد. عملگر انتساب هر چیزی که در سمت راست آن قرار بگیرد در متغیری که در سمت چپ آن قرار می گیرد ذخیره می کند.
برای مثال کدهای زیر را در نظر بگیرید:
<%
Dim MyVariable
MyVariable = ۳
MyVariable = ۵
%>
اگر شما قبلا برنامه نویسی نکرده باشید ممکن است از این که متغیر MyVariable در یک لحظه هم مقدار ۳ و هم مقدار ۵ را گرفته است متعجب شده باشید. باید دقت نمایید که عملگر انتساب را با مشابه آن در مبحث ریاضیات اشتباه نگیرید. جمله سوم می گوید که متغیر MyVariable برابر ۵ می باشد. این جمله در داخل متغیر MyVariable مقدار ۵ را ذخیره می کند.
به منظور یک دوره کوتاه ما خط به خط این کدها را مورد بررسی قرار می دهیم.
دردومین خط همان طور که قبلا توضیح داده شد یک متغیر تعریف شده است. در این هنگام یک مقدار Empty در داخل متغیر MyVariable ذخیره می گردد. در خط بعد مقدار ۳ به متغیر MyVariable تخصیص داده می شود. بنابراین در داخل جعبه ای که دارای بر چسب MyVariable میباشد هم اکنون مقدار ۳ وجود دارد. در انتها مقدار ۵ به متغیرMyVariable تخصیص داده می شود. مقدار ۳ که وجود داشت اکنون از بین می رود!
به این نکته در هنگام برنامه نویسی دقت کنید که در داخل متغیر ها هرگز مقادیر جدیدی را جایگزین ننمایید تا زمانی که اطمینان حاصل کنید کارتان با مقدار قبلی تمام شده است. اگر مسلم شد که به جایگزینی یک مقدار برای استفاده بعدی نیاز دارید ممکن است یک متغیر دومی را ایجاد کنید و آن را به شکل زیر نگهداری نمایید:
<%
Dim MyVariableX, MyVariableY
MyVariableX = ۳
MyVariableY = MyVariableX
MyVariableX = ۵
%>
در اینجا خط دوم با دو متغیر تعریف شده است MyVariableX و MyVariableY. در ابتدا در هر دو مقدار Empty قرار داده می شود.
در خط بعد مقدار ۳ در داخل MyVariableX قرار داده می شود. مقدار دهی تنها با مقادیر صریح مثل ۳ یا ۵ انجام نمی گیرد بلکه با متغیر ها نیز صورت می گیرد. در نهایت در هر دو متغیر MyVariableY و MyVariableX مقدار ۳ ذخیره می گردد.
سرانجام در داخل MyVariableX مقدار ۵ قرار داده می شود. این مساله بر روی متغیر MyVariableY تاثیری ندارد. خط ۳ هر چه که در داخل MyVariableX وجود دارد به داخل MyVariableY کپی می کند اما این کار هیچ نوع ارتباط دائمی بین دو متغیر MyVariableX و MyVariableY ایجاد نمی کند با این کار MyVariableX با مقدار جدید مورد استفاده قرار می گیرد. اما اگر شما هنوز به مقدار قبلی نیاز داشته باشید از طریق MyVariableY به آن دسترسی خواهید داشت.
اکنون به آخرین نسخه ازین کدها نگاه کنید:
<%
Dim ivar
ivar = ۳
۵ = ivar
%>
آیا فکر می کنید این کد ها کار میکند؟ (اولین پاراگراف مربوط به عملگرهای انتساب را در صورتی که اطمینان ندارید دوباره بخوانید.)
جواب منفی است. این کدها معتبر نمی باشد. دو خط اول قابل انتظار می باشد اما خط سوم بی معنی است. عملگر انتساب هر چه که در سمت راست آن قرار دارد در داخل متغیر سمت چپ کپی می کند.در این نمونه عدد ۵ یک متغیر نیست و در سمت چپ قرار دارد. عدد ۵ نمیتواند به عنوان نام یک متغیر به کار رود زیرا نام متغیر ها باید با یک حرف آغاز شود.
ما از نوع integer در این مثال ها استفاده نموده ایم اما می توانستیم از انواع دیگر استفاده کنیم. عملگر انتساب با نوع های Booleans, Strings, doubles, singles به خوبی کار می کند:
StrName = "X"
Bol_The_Assignment_operator_Is_Powrful = True
Dtjills_Birthday = #۰۳/۰۶/۱۹۴۶#
نکته: محصور کردن داده با علامت # داده را به سه قسمت ۳ و ۶ و ۱۹۴۶ تقسیم می کند.
ممکن است متوجه شده باشید که در لیست قبل از عملگر انتساب استفاده شده است. لیست زیر یک نسخه تغییر یافته از این کد ها می باشد که عملگر انتساب را با کمی تغییر نشان میدهد.
نام فایل را AssignmentDemo.asp بنامید:
<% @ Language="VBScript" %>
<% Option Explict
Dim strName, iAge
%>


<%
Response.Write("Before assigning a value, strName has value ")
Response.Write(strName)
%>


<%
strName= "James"
iAge = ۲۱
Response.Write( "Now strName has value ")
Response.Write(strName)
%>


<%
Response.Write( "Now iAge has value " )
Response.Write(iAge)
%>


● تجزیه:
خط ۳ دو متغیر را به نام های StrName و iAge تعریف کرده است. خطوط ۸ و ۹ یک پیغام را می نویسد که نشان می دهد که StrName قبل از این که ما از عملگر انتساب استفاده نماییم چه مقداری داشته است.
خطوط ۱۳ و ۱۴ مقادیر ۲ متغیر را تنظیم می کنند. خطوط ۱۵ و ۱۶ مقدار جدید داده شده به متغیر StrName را نشان می دهند. به خروجی نگاه کنید شما می توانید هم اکنون تایید کنید که عمل انتساب درست صورت گرفته است. خطوط ۲۰ و ۲۱ به طور مشابه مقدار جدید داده شده به متغیر iAge را نشان می دهد.

کار با متغیرها در زبان ASP کلاسیک

در بیشتر زبان های برنامه نویسی باید بین متغیر های داده های مختلف فرقی وجود داشته باشد. یک متغیر که برای نگهداری رشته ها استفاده میشود بعدا نمی تواند برای نگهداری یک عدد مورد استفاده قرار گیرد.  
● اعداد اعشاری یا Floating Point Numbers
اعداد اعشاری اعداد decimal شناور می باشند. اعداد ۵/۱,۴/۳ ,۱/۴ و حتی ۰/۵ همگی اعداد اعشاری می باشند.توجه به این نکته مهم می باشد که اعداد ممیز شناور اغلب گرد شده یا بریده میشوند تا به اندازه فضایی شوند که به انها اختصاص داده شده است.
نوع داده ای Single و Double به اعداد ممیز شناور اختصاص داده شده اند. فرق بین این دو در دقت اعدادی که در خود ذخیره می کنند می باشد. در نوع Double دو برابر Single حافظه لازم دارید اما بدیهی است که محدوده اعداد بزرگتر را می تواند در خود نگهداری کند و همچنین دقت بیشتری نسبت به Single دارد.
در VBScript شما هیچ نگرانی در مورد این دو ندارید. گاهی اوقات در هنگام کار کردن با اعداد ممیز شناور شما انها را به صورت اعداد علمی می بینید.
● رشته(String)
یک رشته می تواند زنجیره ای از حروف ، اعداد و نشانه ها را در داخل خود نگهداری کند.رشته ها باید از کد ها ، نام های متغیر و اعداد به وسیله قرار دادن آنها بین علامت " " شناخته شوند. عبارت "Welcome To macromediax" و"۱۲۳۲۴" مثال هایی از رشته می باشند. حتی رشته خالی " " می تواند همان رفتار یک رشته را نشان دهد.
هنگامی که ما از یک عبارت مانند response.write “hell” را استفاده میکنیم "Hello" یک مقدار رشته ای می باشد. متغیر های رشته ای اغلب در فرستادن خروجی هایی مثل مثال بالا استفاده می شوند.
● Data(اطلاعات)
یک خصوصیت مفید VBScript که در دیگر زبانهای برنامه نویسی وجود ندارد مدیریت اطلاعات می باشد.اگرچه می توان داده ها را به صورت رشته ها یا اعداد نمایش داد ولی استفاده از این متغیر ها کارها را ساده می نماید.متغیر داده ای می تواند زمان یا تاریخ و اطلاعات متنوع توابع تاریخ VBScript و عملگر هایی که فرمت اطلاعات مربوط به تاریخ را چاپ می نمایند را نگهداری کنند.
● Boolean
این نوع متغیر، فقز مقادیر درست یا غلط را در خود نگهداری می کند.متغیر های Boolean معمولا وقتی یک تصمیم گیری مورد نیاز می باشد استفاده می گردند.ارزش متغیر می تواند تعیین کند که کدام یک از دو عمل باید انجام بگیرد.این عمل به وسیله ساختار کنترلی انجام می گیرد.مثلا برای تعیین جنسیت کاربران به دونوع مذکر و مونث میتوان ازین نوع داده ای استفاده کرد .
● نوع داده Currency
یک عدد دقیق که تنها برای ذخایر پولی به خوبی کار خواهد کرد.اما VBScriptیک نوع داده مخصوص برای پول مهیا می کند که با چندین تابع مخصوص VBScript کار میکند.
● Object
این قسمت به اشیا مخصوص اشاره دارد.از اشیا در کار کردن با عملگرهای مربوطه به پایگاههای داده استفاده می شود.و در جای خود آن را مورد بحث قرار می دهیم.
● Variant Variables چه هستند؟
در بیشتر زبان های برنامه نویسی باید بین متغیر های داده های مختلف فرقی وجود داشته باشد. یک متغیر که برای نگهداری رشته ها استفاده میشود بعدا نمی تواند برای نگهداری یک عدد مورد استفاده قرار گیرد. البته این موضوع در زبان VBScript صادق نمی باشد VBScript از Variant Vciriables هایی استفاده می کنند که متغیر هایی هستند که شامل مقادیری از هر نوع می تواند باشد.

آموزش ASP استفاده از تابع Time

به منظور ایجاد صفحه ASP خودتان، شما احتیاج به یک کامپیوتر با یک سرویس دهنده وب دارید که تکنولوژی ASP را پشتیبانی نماید. من به شما طریقه تنظیم و نصب دو سرویس دهنده رایگان وب مایکروسافت را نشان دادم که عبارت بود از PWS و IIS. در این زمان شما باید یک سرویس وب که با ASP کار می کند داشته باشید یا به یک کامپیوتری که بر روی آن چنین سرویس دهنده وبی نصب شده است، دسترسی داشته باشید.
بعد از اینکه یک سرویس دهنده وب را نصب کردید، شما می توانید صفحات ASP را در دایرکتوری ریشه سایت وبتان(wwwRoot) ایجاد نمایید یا آنرا در زیر فهرستهای دایرکتوری ریشه قرار دهید و صفحات ASP حاصله را بوسیله مرورگر وب مشاهده نمایید. از آنجایی که صفحات ASP بصورت کامل بر روی سرویس دهنده پردازش می گردند و فقط HTML به بخش سرویس گیرنده برگشت داده می شود، هر مرورگر وبی می تواند برای مشاهده صفحات ASP مورد استفاده قرار بگیرد
شما هم اکنون عناصر لازم برای ایجاد و ودیدن صفحات ASP را در اختیار دارید.
در طی جلسات آینده، شما یاد خواهید گرفت که کدهای VBScript را که یکی از زبانهای پر کاربرد در ایجاد صفحات ASP می باشند را به صفحات وارد یا خارج نمایید. حال به یک صفحه ASP نگاهی میندازیم. این کار به شما کمک میکند که با علایم و دستور زبان VBScript آشناتر گردید. به علاوه آن به شما نشان می دهد که کارهای زیبایی را می توانید با ASP انجام دهید.
تصور نمایید که بر حسب اوقات روز، می خواهید پیامهای مختلفی را بر روی صفحه وب مشاهده نمایید. برای مثال، اگر ساعت ۱۱:۰۰ صبح می باشد، شما می خواهید پیام Good Morning را مشاهده نمایید یا اگر اینکه ساعت ۰۵:۰۰ بعدازظهر می باشد شما پیام Good Evening را مشاهده نمایید. با استفاده از دستورات و کدهای HTML، شما باید دوبار صفحه HTML را در روز ویرایش نمایید. یک بار قبل از ظهر و یکبار بعد از ظهر(به منظور تغییر صفحه وب و تغییر دادن پیامها). با صفحات ASP، شما باید از کدهای برنامه نویسی برای تعیین وقت فعلی و نمایش پیغام مناسب بر حسب زمان را استفاده نمایید. اسکریپت زیر شامل کدهایی برای یک صفحه ASP می باشد که پیغام مناسب را بر حسب زمان فعلی نمایش می دهد.
<%@ Language="VBScript" %>
<% Option Explicit %>


The current time is <% = Time ( ) %>


<%
If datepart("h",time()) >= ۱۲ then
&#۰۳۹;After noon
Response.Write "Good Evening"
Else
&#۰۳۹;Before noon
Response.Write "Good Morning"
End If
%>


▪ تجزیه و تحلیل: به منظوری دیدن خروجی اسکریپت بالا، یک صفحه ASPبه نام TimeBasedMessage.aspرا ایجاد و این فایل را در فهرست ریشه(X:inetpubwwwRoot) ذخیره نمایید. کدهای موجود در اسکریپت بالا را در داخل فایل ذخیره نموده و سپس آنرا توسط مرورگرتان با نوشتن آدرسURLزیر مشاهده نمایید:
http://localhost/TimeBasedMessage.asp
اکنون کدهای موجود در اسکریپت بالا را را مرور می کنیم. خط ۱ با دستورLanguage @شروع شده است که به سرویس دهنده وب اطلاع می دهد که زبان scriptingکه در صفحه ASP فعلی استفاده شده است چه می باشد ( که در جلسه بعدی، کالبد شکافی اولین ASP نوشته شده را خواهیم داشت).به خاطر داشته باشید که همیشه این دستور در خط اول صفحات ASP به کار برده می شود. خط ۲، Option Explicitخط دیگری می باشد که همیشه در همه صفحات ASP که شما ایجاد می نمایید مورد استفاده قرار می گیرد. وقتی دستور Option Explicit مورد استفاده قرار می گیرد، همه متغیر های ما باید به صورت صریح تعریف گردند که در جلسات بعدی در مورد Option Explicit بیشتر بحث خواهد شد. خط ۶ زمان فعلی سیستم را با استفاده از تابع( ) Time نمایش می دهد. این تابع <%( ) Time = %> در جلسات بعدی مورد بحث قرار می گیرد. خطوط ۷ تا ۱۵ بلوک کدهای ASP می باشند، که بوسیله محدود کننده های <%و%>مشخص شده اند. یک Ifدر خط ۸ استفاده شده است که معین می نماید آیا ساعت فعلی قبل از ظهر می باشد یا بعد ازظهر(در جلسات بعدی مورد بحث قرار می گیرد). قسمت Datapart که در اینجا استفاده شده است، به این منظور می باشد که فقط بخش ساعت از ساعت فعلی سیستم را در اختیار ما قرار دهد نه ثانیه و دقیقه و غیره... که در جلسات بعدی بیشتر مورد بحث قرار خواهد گرفت.

آموزش Asp.net

چرا به دات نت احتياج داريم؟
به طور معمول نسل های جديد زبان های برنامه نويسی به اين دليل متولد می شوند که زبان های قديمی تر دارای امکانات محدود بودند و يا قدرت استفاده از تکنولوژی های فعلی را به صورت مطلوب و ساده ندارند.
مهمترين نيازی که به عنوان آخرين تکنولوژی وجود دارد، برنامه نويسی در محيط اينترنت است. اينترنت در مدت تقريبا ۸ سال جای خود را به عنوان يکی از مهمترين وسايل ارتباطی برای کارهای روزمره و تجارت باز کرده است. سيستم های برنامه نويسی قديمی تر امکان برنامه نويسی برای اينترنت را فراهم کرده بودند اما هر کدام دارای اشکالات بزرگی هستند، برای مثال تکنولوژی COM اولين بار در ويندوز به کار گرفته شد. در سال 1970 نيز سيستم هايی برای Unix نوشته شده بودند، جاوا نيز در اصل برای ابزارهای الکترونيکی بود و نه برای اينترنت.
سپس برای اولين بار يک سيستم جامع برای برنامه نويسی تحت اينترنت ايجاد شد. اين سيستم -NET. از مراحل سطح پايين که به زبان ماشين می باشد تا بالاترين سطح که برنامه نويسی ويژوال آن می باشد برای استفاده در اينترنت طراحی شده است. البتهNET. فقط برای اينترنت نيست و با استفاده از آن می توان برنامه های کامل تحت Client نيز ايجاد کرد، اما بزرگترين مزيت آن دربرابر سيستم های ديگر امکانات اينترنت آن است.
برای اينکه مزايای استفاده ازNET. را بهتر متوجه بشويم بهتر است در ابتدا معايب سيستم های پيشين را ذکر کنيم. شرکت مايکروسافت تا قبل از سال 1995 به برنامه نويسی در محيط های Client و Server می پرداخت، اما از آن سال به بعد توجه بيشتری به مساله برنامه نويسی در اينترنت کرد. مايکروسافت COM و +COM را ايجاد کرد و آنها را در ويژوال استوديوی 6 به کار گرفت. در سال 1999 حدود ۵۰ در صد از بزرگترين سايتهای تجارت الکترونيکی از محصولات مايکروسافت استفاده می کردند. اما هنوز هم مشکلات بزرگی در سيستم های مايکروسافت وجود داشت که يکی از آنها دشواری نوشتن برنامه در اينترنت با محصولات مايکروسافت بود. شرکت مايکروسافت برای راحتی کار برنامه نويس ها ASP يا Active Server Page را ايجاد کرد. با اينکه اين يک قدم بزرگ بود و کارها را بسيار ساده کرد ولی هنوز از برنامه نويسی شی گرا پشتيبانی نمی کرد. همچنين در ويژوال استوديوی 6 قسمتی برای Internet Application ايجاد شده بود و در آنها امکان ساختن Web Class وجود داشت ولی هيچ وقت به عنوان يک ابزار کار آمد برای برنامه نويسی وب درنظر گرفته نشد.
مدل برنامه نويسی DNA
مايکروسافت يک مدل برنامه نويسی به نام Distributed interNet Application دارد که بر پايه برنامه نويسی n-tier و COM بنا نهاده شده است. مدل DNA از سه بخش اساسی تشکيل شده است.
بخش اول به نام Presentation tire معروف است. در اين بخش رابط تصويری کاربر وجود دارد و خود نيز به دو نوع Internet Browser و Win 32 GUI تقسيم می شود که هر کدام مشکلات خاص خود را دارند. در مدلی که از Win32 GUI يا همان نرم افزارهای معمولی استفاده می شود دو مشکل بزرگ وجود دارد ؛ دشواری بروز رسانی نرم افزار و ديگری DLL Hell که در ادامه توضيح داده خواهد شد. در نوع دوم مشکلاتی از قبيل نبود امکانات برنامه نويسی کافی در محيط مرورگر، نبود رابط قوی با کاربر، نبودن مرورگر های يکسان و... وجود دارد. همچنين هميشه يک اتصال به اينترنت يا اينترانت لازم است. در اين نوع از برنامه نويسی می توان از Java Applet ها يا ActiveX استفاده کرد ولی مرورگر بايد امکان استفاده از آن را داشته باشد، مخصوصا ً هنگام استفاده از ActiveX که بايد فقط از IE استفاده کرد.
بخش دوم که Middle tier نام دارد، مکانی است که اطلاعات و قوانين تجاری در آن وجود دارد. منظور از قوانين ، متد ها و اجزائی هستند که اعمال کاربران را کنترل می کنند. مهمترين و آسان ترين زبان برای نوشتن اين اجزا از DNA ويژوال بيسيک است. برنامه نويسی که بخواهد در اين رده برنامه بنويسد بايد آشنايی کاملی با COM و پروتکل های رايج داشته، همچنين بايد مهارت کافی در استفاده از ADO و ADSI داشته باشد. مشخص است که يک اشتباه در اين لايه باعث بروز خطا و نقص در کل سيستم می شود.
بخش سوم يا Data tier مکانی است که اطلاعات سازمان در آن ذخيره می شود. معمولا ً در اين قسمت از بانکهای پيشرفته رابطه ای مانند SQL Server و Oracle استفاده می کنند.
محدوديت های COM
همانطور که ديديد مهمترين قسمت در DNA همان COM است که در جای جای آن استفاده می شود. در اينجا برخی معايب COM ذکر می شود : ( در ابتدای متن ذکر شد که برای درک نياز بهNET. بايد ابتدا معايب سيستم های قديمی را بشناسيم )
DLL Hell: اگر کوچکترين تغييری در يک COM ايجاد شود، ديگر برنامه هايی که از ورژن قبلی استفاده می کردند قادر به فعال ساختن نسخه جديد نيستند. هنگامی که در ويندوز، يک COM نصب شود برايش در رجيستری يک GUID ثبت می شود که اطلاعات آن COM را در خود ذخيره می کند. اگر يک برنامه از نسخه اول يک COM استفاده کند و بعد از مدتی شما تغييراتی در نسخه اول بدهيد و بخواهيد آن را دوباره در سيستم نصب کنيد ويندوز به شما پيغام خطا می دهد چون ورژن آن تکراری است، اگر هم آن را به ورژن دوم ارتقا دهيد نرم افزار قبلی هنوز به دنبال نسخه اول می گردد. اين امر باعث می شود که شما مجبور شويد يکبار ديگر کل برنامه را کامپايل کرده و در کامپيوترتان نصب کنيد.
کمبود در وراثت: در نسخه های COM که در حال حاضرهستند چيزی به نام وراثتی که در ++C وجود دارد نمی باشد، بلکه وراثت تنها در واسط يک COM می باشد، استفاده از آن هم چندان کمکی به برنامه نويسی نمی کند.
برخی محدوديت های برنامه نويسی اينترنتی در مدل DNA
 وجود دو محيط برنامه نويسی برای اينترنت و Client
نقصان در نوشتن برنامه هايی با رابط گرافيکی خوب که در اينترنت کار می کردند کاملا ً مشهود است، نمونه بارز آن اختلاف در برنامه نويسی در ويژوال بيسيک و ASP است. ويژوال بيسيک با رابط گرافيکی کاملا ً سطح بالا و ASP تقريبا ً رابط گرافيکی ندارد. همين امر باعث می شد که يک برنامه نويس مجبور باشد طيف وسيعی از تکنيک ها و زبان ها را فرابگيرد تا بتواند برنامه ساده ای در اينترنت بنويسد.
 نبودن حالت های ذخيره اطلاعات رابط گرافيکی در صفحه های اينترنتی
نمونه اين حالت زمانی است که در يک textbox متنی وجود داشته باشد. در برنامه های Win32 GUI متن داخل textbox تا زمانی که کاربر يا برنامه آن را تغيير نداده بر جای خود وجود دارد. اما در محيط اينترنت و نوع ASP با هر بار refresh کردن صفحه کل اطلاعات ازبين می رود. البته اين مشکل با استفاده از شئ های Request و Response تقريبا ً قابل حل است ولی احتياج به برنامه نويسی برای هر تکه از صفحه ASP دارد.
 نداشتن Event Handler در محيط برنامه نويسی اينترنت
يکی از مهمترين ابزاری که در برنامه نويسی Win32 GUI وجود دارد استفاده از Event ها است. با تکنولوژی که در حال حاضر وجود دارد تنها راه رسيدن به اين مهم استفاده از ActiveX است که به علت مسايل امنيتی در بيش از ۹۵ در صد مواقع توسط کاربر استفاده از آن رد می شود.
معايب استفاده از API
API ها توابعی هستند که از ويندوز نسخه 1 تا امروز در برنامه نويسی کاربرد داشته و دارند. مهمترين کاری که اين توابع انجام می دهند انجام کارهای سخت و سطح پايين سيستمی است که احتياج به برنامه نويسی زيادی دارند و يا حتی امکان ايجاد آن با زبان هايی مثل ويژوال بيسيک نيست. اما هر API از هر نسخه ويندوز تا نسخه ديگر آن می تواند دچار تغييرات بشود. برای مثال برنامه ای که در ويندوز 98 نوشته شده باشد می تواند در ويندوز 95 اجرا نشود. همچنين هم اکنون ابزارهای جديدی به بازار آمده است که برای آنها نيز می توان برنامه نويسی کرد، مانند تلفن های سيار، کيوسک تلفن، دستگاه های کامپيوتری جيبی و غيره. در اين نوع دستگاه ها ديگر ويندوز به مفهومی که در حال حاضر وجود دارد قابل اجرا نيست و در نتيجه API هم وجود ندارد. لازم به ذکر است که ويندوز CE برای دستگاه های مذکور می باشد ولی قابليت های آن با ويندوزهای ديگر تفاوت زيادی دارد.
آشنائی با ASP.NET
NET نسل بعدی Active Server Pages يا ASP است که توسط شرکت ميکروسافت ارائه شده است. اين محصول توسط ميکروسافت بعنوان شاخص اصلی فناوری در ساخت سايتهای وب در نظر گرفته شده است. با استفاده از ASP.NET می توان هم اينترانت کوچک يک شرکت را ساخت و هم يک سايت وب تجاری خيلی بزرگ را طراحی و پياده سازی نمود. مهمترين نکاتی که در طراحی اين محصول در نظر گرفته شده است راحتی استفاده و بالا بودن کارائی و قابليت آن می باشد. در زير برخی ويژگيهای ASP.NET را بررسی می کنيم.
صفحات ASP.NET کامپايل می شوند.
هنگامی که يک صفحه ASP.NET برای اولين بارتوسط يک مراجعه کننده به سايت فراخوانی می شود، آن صفحه ابتدا کامپايل شده و بر روی سرور نگهداشته می شود و در فراخوانی های بعدی از آن استفاده می شود. اين بدين معنی است که صفحات ASP.NET خيلی سريع اجرا می شوند.
 صفحات ASP.NET با ابزارهای روی سرور ساخته می شوند.
با ابزارهای موجود در ASP.NET می توان صفحات پيچيده وب را براحتی طراحی نمود. بعنوان مثال با استفاده از ابزار DataGrid می توان به آسانی داده های موجود در يک بانک اطلاعاتی را تحت وب نمايش داد.
مجموعهASP.NET عضوی از بدنه NET. است.
بدنه NET. دارای بيش از ۴۵۰۰ کلاس آماده جهت استفاده در ASP.NET است. اين کلاس ها تقريبا هر نيازی را در برنامه نويسی برآورده می کنند. بعنوان مثال از اين کلاس ها می توان جهت توليد تصاوير بر حسب تقاضا، به رمز درآوردن يک فايل و يا ارسال يک نامه استفاده کرد.
مقايسه ASP.NET و ASP کلاسيک
ASP.NET نسل بعدی ASP يا ASP کلاسيک است. اما اين يک پيشرفت تکاملی است بطوريکه اين دو فناوری تقريبا از يکديگر متفاوتند. صفحات ASP با زبان های دستورالعمل نويسی مانند VBScript يا JScript ايجاد می شوند اما در ASP.NET ما يک فرايند کامل برنامه نويسی با زبانهای Visual Basic يا #C (سي-شارپ تلفظ شود) داريم. همچنين در ASP کلاسيک تنها پنج کلاس استاندارد (Request, Response, Application Session, Server) وجود دارد حال آنکه در ASP.NET می توان از بيش از ۴۵۰۰ کلاس استاندارد موجود در بدنه NET. بهره جست.همچنين عليرغم قدرت و امکانات زياد و متعدد ASP.NET، استفاده از آن در مقايسه با ASP کلاسيک بسيار آسانتر است. بعنوان مثال با استفاده از چند ابزار در يک صفحه ASP.NET می توان يک صفحه بسيار پيچيده HTML بدست آورد که ساخت آن در ASP کلاسيک ممکن است نياز به چند روز کار داشته باشد.
زبانهای برنامه نويسی در ASP.NET
شما در ASP.NET می توانيد از هر زبان برنامه نويسی که با بدنه NET. سازگار باشد استفاده کنيد. اين زبانها عبارتند از Visual Basic.NET و #C و JScript.NET . اين بدين معنی است که شما جهت نوشتن برنامه در ASP.NET نياز به فراگيری زبان جديدی نداريد و اگر يکی از زبانهای ويژوال بيسيک يا ++C يا جاوا را می دانيد هم اکنون می توانيد در ASP.NET برنامه بنويسيد.از طرف ديگر تعدادی زبانهای ديگر توسط بعضی از شرکتهای فعال در اين زمينه به مجموعه زبانهای استاندارد ASP.NET افزوده شده است. بعنوان مثال اگر مايل باشيد حتی می توانيد از PERL و COBOL هم در ASP.NET استفاده کنيد.
ابزارهای ASP.NET
سالهاست که برنامه نويسان ويژوال بيسيک جهت ساخت فرم های خود از ابزارهای ويژوال بيسيک مانند TextBox و ListBox استفاده کرده اند. در ASP.NET هم شما می توانيد از ابزارهای فراوان موجود در آن برای ساخت فرم ها و صفحات خود استفاده نمائيد. در ASP.NET چهار دسته عمده از ابزارها موجود است:
 ابزارهای اصلی مانند TextBox، RadioButton، ListBox و Button.
 ابزارهای اعتباری برای حصول اطمينان از ورود و تائيد صحت اطلاعات ورودی فرم ها.
 ابزارهای داده ای برای ارتباط با بانک اطلاعاتی و دستکاری داده.
 ابزارهای پيشرفته جهت نمايش عناصر پيچيده در واسط کاربر مانند تقويم و آگهی های تبليغاتي.
با استفاده از Visual Studio.NET شما براحتی می توانيد با چيدن تصويری اين ابزارها بر روی فرم مورد نظر، صفحه دلخواه خود را بسازيد. در صورت تمايل حتی می توانيد در يک ويرايشگر ساده متن مانند Notepad برنامه مورد نظر را نوشته و از اين ابزارها استفاده کنيد.
دريافت ASP.NET
جهت شروع برنامه نويسی در ASP.NET تنها کافی است که مجموعه ASP.NET را بهمراه بدنه NET. از سايت ميکروسافت دريافت کنيد.
دريافت .NET Framework
ASP.NET با سيستم عامل های Windows 2000 (نسخه Server و Professional) و Windows XP کاملا سازگار است.
Namespace چيست؟
يک نکته مهم که در زمان استفاده از NET Framework. بايد به آن توجه داشت آن است که فضانام (namespace يا نامکده) ها در ساختمان برنامه کاربردی قرار دارند. فضانام يک طرح نامگذاری منطقی برای گروه بندی کلاس های مرتبط است. اين طرح مانع از آن می شود تا کلاس هايی که برای متدها و خصوصيات از يک شناسه يکسان استفاده می کنند تداخل داشته باشند.
مثلا NET Framework. برای گروه بندی تايپ ها به مقوله های منطقی عملکرد، از قبيل چارچوب برنامه کاربردی ASP.NET، از يک طرح نامگذاری سلسله مراتبی استفاده می کند. ابزارهای طراحی از فضانام ها با هدف تسهيل مرور و ارجاع تايپ ها در برنامه بهره برداری می کنند. مثلا فرض کنيد در حال نوشتن کد زير هستيد:
Public Class NewClass
[Procedures and Functions]
End Class
Public Class NewClass
[Procedures and Functions]
End Class
اين کد به خطا منجر می شود چون کامپايلر راهی برای تشخيص کلاس ها از يکديگر ندارد. برای غلبه بر اين مشکل می توان از يک فضانام استفاده کرد که اجازه می دهد دو کلاس همنام در صفحه با هم وجود داشته باشند. قطعه برنامه زير تعريف اين دو کلاس در فضانام های منحصر بفرد را نشان می دهد:
Namespace One
Public Class NewClass
[Procedures and Functions]
End Class
End Namespace
Namespace Two
Public Class NewClass
[Procedures and Functions]
End Class
End Namespace
در اين کد برخوردی بين دو کلاس با نام NewClass وجود ندارد چون هر کدام در يک فضانام جداگانه قرار داده شده است. کلاس اول را می توان با استفاده از ترکيب One.NewClass صدا زد، حال آنکه کلاس دوم را می توان با استفاده از ترکيب Two.NewClass صدا زد.
شما می توانيد در فضانام های خود از يک ساختار سلسله مراتبی استفاده کنيد. قرار دادن اشياء مشابه تحت زيرعنوانها در يک فضانام مشترک تشخيص هدف فضانام را آسانتر می کند، و در عين حال باعث می شود برنامه به مراتب شئ گراتر شود.
برای توضيح فضانام می توان ساختار فايل و دايرکتوری (کشو، فولدر) در يک کامپيوتر را در نظر گرفت. در اين مثال کلاس ها به مثابه فايل ها و فضانام ها مانند دايرکتوری ها هستند. بديهی است همانگونه که می توانيم دايرکتوريهای تو در تو داشته باشيم، فضانام ها هم در حاليکه کلاس ها را در خود جای داده اند می توانند بصورت تو در تو باشند.
فضانام ها در ساخت برنامه های کاربردی ASP.NET نقش مهمی ايفا می کنند. خوشبختانه لازم نيست برای همه اشيايی که می توانند به وسيله صفحات ASP.NET مورد استفاده قرار بگيرند سيستم طبقه بندی فضانام ايجاد کنيد. مايکروسافت اين مساله را برای شما حل کرده است. دو فضانام ريشه، و فضانامهای فرزند آنها را می توان وارد صفحات ASP.NET خود کرد. اولی System ناميده می شود، و دومی Microsoft نام دارد. اين فضانامها با جزئيات بيشتر در ادامه مورد بحث قرار گرفته اند.
فضانام System
فضانام System فضانام اصلی برای ساخت ASP.NET و همه برنامه های کاربردی ديگر مبتنی بر NET Framework. است. هر چيزی که در برنامه کاربردی شما قابل انجام باشد از طريق فضانام System کنترل می شود. به عنوان مثال کنترل آرايه، عمليات رياضی، و تبديل نوع داده ها از طريق فضانام System و فضانامهای فرزند آن اداره می شوند. ۹ فضانام پيش فرض (فضانام System و ۸ فرزند آن) وجود دارند که به صورت خودکار به صفحات ASP.NET اضافه می شوند:
 System
 System.ComponentModel.Design
 System.Data
 System.Drawing
 System.Web.SessionState
 System.Web
 System.Web.UI
 System.Web.UI.WebControls
 System.Web.UI.HTMLControls
هشت فضانام (بجز فضانام System) در زمان ساخت Visual Studio.NET يا VS.NET بطور خودکار به صفحات ASP.NET وارد می شوند. اين فضانام ها در زير به اختصار شرح داده شده اند.
 System.ComponentModel.Design: دربرگيرنده کلاس هايی است که می توان از آنها برای طراحی پشتيبانی سفارشی اجزا و زمان طراحی و دسترسی به سرويس های تامين شده توسط معماری NET Framework. استفاده کرد. 
 System.Data: امکان دسترسی به کلاس ها و رابطهايی را فراهم می کند که معماری ADO.NET را برای دسترسی به داده های عمومی تشکيل می دهند. 
 System.Drawing: دربرگيرنده کلاس ها و رابطهايی است که عملکرد گرافيکی اوليه را تامين می کنند. فضانام System.Drawing نيز از طريق فضانام System.Drawing.Drawing2D و System.Drawing.Imaging عملکرد پيشرفته تری فراهم می کند. 
 System.Web: کلاس ها و رابطهايی تامين می کند که ارتباط مرورگر/سرويس دهنده را امکان پذير می کنند. اين فضانام دربرگيرنده کلاس HTTPRequest (فراهم کننده اطلاعات وسيعی درباره درخواست HTTP جاری)، کلاس HTTPResponse (فراهم آورنده امکان دسترسی به فرآيندها و يوتيليتی های سمت سرويس دهنده) است. 
 System.Web.SessionState: فراهم کننده کلاس ها و متدهايی برای مديريت وضعيت جلسات کاری می باشد. 
 System.Web.UI: فراهم کننده کلاس ها و رابطهايی برای رابط واسط کاربر برنامه کاربردی ASP.NET است که موجب می شوند برنامه کاربردی با سطوح مختلف صفحه، ارتباط برقرار کند. کلاس اصلی اين فضانام، کلاس Page می باشد که دربرگيرنده همه خصوصيتها، متدها، و سازنده های صفحه است. اشياء اصلی Active Server Page زير خصوصيتهايی در کلاس Page هستند: Application ،Response ،Request ،Server و Session. 
 System.Web.UI.HTMLControls: کلاس هايی برای عناصر HTML استاندارد، شامل فرم ها، کنترل های ورودی، آنکور، جداول، قسمتهای متنی، و غيره فراهم می کند. اين کنترلها همانند تگهای عادی HTML هستند با اين تفاوت که داری دو صفت runat="server" و id="controlname" می باشند. 
 System.Web.UI.HTMLControls: برای کنترلهای سرويس دهنده ای که شبيه کنترلهای HTML هستند ولی انعطاف پذيری بيشتر و عملکرد پيچيده تری دارند کلاس هايی را تامين می کند.
برخی فضانام های مهم و پرکاربرد ديگر به شرح زير می باشند.
 System.IO: دربرگيرنده رابطها و کلاس هايی است که امکان خواندن و نوشتن همگام و غيرهمگام فايل ها و جريانهای داده را فراهم می کنند. 
 System.Data.OleDb: امکان دسترسی به کلاس ها و رابطهای مخصوص دسترسی به يک منبع داده از طريق ADO را فراهم می کند. 
 System.Data.SqlClient: امکان دسترسی به کلاس ها و رابطهای مخصوص دسترسی به داده های خاص Microsoft SQL Server از طريق ADO را فراهم می کند. 
 System.Web.Security: امکان دسترسی به کلاسها و رابطهای مخصوص امنيت برنامه کاربردی ASP.NET را فراهم می کند. دستيابی به رمزنگاری، مجوزها، و تنظيمات خط مشی برنامه کاربردی در اين فضانام قرار می گيرند. 
 System.XML: امکان دسترسی به کلاسها و رابطهای مخصوص پردازش اسناد XML را فراهم می کند.
فضانام Microsoft
علاوه بر فضانام System که در چارچوب NET. يافت می شود، مايکروسافت چند فضانام اضافه کرده است که برای زبان برنامه سازی ای که می خواهيد از آن در برنامه کاربردی خود استفاده کنيد عملکرد لازم را تامين می کنند. ممکن است شما بصورت مستقيم با اين فضانام کاری نداشته باشيد.
 Microsoft.VisualBasic: اين فضانام محتوی CLR يا زمان اجرای Visual Basic.NET است. از اين زمان اجرا با زبان Visual Basic.NET استفاده می شود. اين فضانام همچنين دربرگيرنده کلاس هايی است که از کامپايل و توليد کد با استفاده از زبان ويژوال بيسيک پشتيبانی می کنند. 
 Microsoft.CSharp: اين فضای نام دربرگيرنده کلاس هايی است که از کامپايل و توليد کد با استفاده از زبان #C پشتيبانی می کنند. 
 Microsoft.JScript: اين فضای نام دربرگيرنده کلاس هايی است که از کامپايل و توليد کد با استفاده از زبان JScript پشتيبانی می کنند. 
 Microsoft.Win32: کلاسها و رابطهای مورد نياز برای کار با کليدها و hiveهای رجيستری را تامين می کند.
با وجود آنکه فضانام ها از قبل تامين می شوند، می توانيد برای استفاده از برنامه کاربردی ASP.NET فضانام های خود را ايجاد کنيد. برای هر کلاس ايجاد شده توسط سازنده يک فضانام توليد می شود.
استفاده از فضانام ها در صفحات ASP.NET
دو راه برای افزودن فضانام به برنامه کاربردی ASP.NET وجود دارد. از شبه دستور (Directive) صفحه Import@ برای صفحات ASPX و از کلمه کليدی Imports برای افزودن فضانام به برنامه codebehind مربوطه در ويژوال بيسيک استفاده می شود و برای زبان #C از دستور using استفاده می گردد. قطعه برنامه زير ترکيب نحوی برای افزودن فضانام System.Web.UI.WebControls به صفحه ASP.NET شما است.
<%@ Import namespace = "System.Web.UI.WebControls" % >
همين فضانام را در قسمت codebehind بصورت زير به برنامه اضافه می کنيم.
Imports System.Web.UI.WebControls (vb.net )
using System.Web.UI.WebControls; (C#)
( به تفاوت Import و Imports دقت کنيد )
در صورتيکه می خواهيد چند فضانام را به صفحه ASP.NET خود و يا صفحه codebehind اضافه کنيد بايد هرکدام را جداگانه اضافه کنيد. بعنوان مثال، برای افزودن فضانام System.Web.UI.HTMLControls به صفحات با فضانام های موجود، درست بعد از آخرين عبارت مهم به خط بعد برويد و Imports System.Web.UI.HTMLControls را اضافه کنيد. به محض آنکه .Imports System را تايپ کنيد، VS.NET فهرستی از فضانام ها را ظاهر می کند، و می توانيد به سادگی فضانام مورد نظر را با ماوس برگزينيد. امتياز اين فهرست آن است که مجبور نيستيد همه فضانام های NET. را از حفظ بدانيد، بلکه می توانيد به آسانی از فهرست انتخاب کنيد. اين ويژگی با عنوان Intellisense شناخته می شود. برای صفحات ASP.NET از اين ترکيب استفاده کنيد:
< %@ Import namespace = "System.Web.UI.WebControls" % >
< %@ Import namespace = "System.Web.UI.HTMLControls" % >
< %@ Import namespace = "namespace name" % >
برای صفحات codebehind ويژوال بيسيک از اين ترکيب استفاده کنيد:
Imports System.Web.UI.WebControls
Imports System.Web.UI.HTMLControls
Imports namespace
Smart Navigation چيست؟
مفهوم Smart Navigation و فوايد آن:
Smart Navigation يكى از بهترين ابزارهاى جديدى است كه ASP.NET آنرا عرضه كرده است. اين ابزار جديد باعث شده ظاهر برنامه هاى وب و احساسى كه نسبت به آن وجود دارد شباهت بيشترى با برنامه هاى عادى و نوشته شده براى ويندوز پيدا كند.
يكى از موانع بزرگ برنامه هاى تحت وب به معمارى و ساختار HTTP برمى گردد. جاييكه مجبوريم اطلاعات جمع آورى شده در سمت مشترى را به سرور بازگردانيم. به همين دليل مجبور به رسم مجدد و كامل صفحه اى كه قبلا ديده ايم مى باشيم، كه اين نه تنها باعث مى شود يك حالت فلش مانند در اين رفت و برگشت و رسم مجدد رخ دهد، بلكه براى صفحه هاى بلند كه براى ديدن تمام صفحه نيازمند بهscrolling هستيم، باعث مى شود كه ديدمان را به اول صفحه انتقال دهد، چيزى كه هم شايد دلخواه ما نباشد و هم اينكه ممكن است باعث سردرگمى كاربر گردد. همچنين اين فرآيند باعث تغيير فوكوس كنترل ها و بسيارى از اتفاقات ديگرنيز مى شود.
در برنامه هاى عادى ويندوز ما به طور معمول فقط قسمت هايى از صفحه را به روز مى كنيم كه تغييرى در آن ايجاد شده باشد يا تحت تاثير چيزى قرار گيرند و اين بدون نياز به تغيير در كل برنامه مى باشد (مثلا فقط يك عضو به listbox ما اضافه مى شود. بدون تغيير و رسم مجدد فرم برنامه).
Smart Navigation يا به عبارتى هدايت هوشمندانه اين توانايى موجود در برنامه هاى ويندوز را براى برنامه هاى تحت وب فراهم مى كند! اما قبل از هر چيز بايد بدانيد كه اين ابزار فقط براى IE مى باشد و آن هم نسخه هاى ۵ به بالاتر آن. با اين وجود شما مى توانيد Smart Navigation را فعال يا غيرفعال سازيد، بدون آنكه تاثيرى در برنامه شما بگذارد. حتى اگر شما در پروژه تان مرورگرهاى محتلفى را مدنظر قرار داده باشيد، مى توانيد Smart Navigation را فعال سازيد. در اين صورت ASP.NET نوع مرورگر را تشخيص داده و Smart Navigation را فقط براى مرورگرهاى پشتيبانى شده فعال مى سازد.
چهار مورد برجسته اى كه Smart Navigation فراهم مى كند عبارتند از:
 صفحه در ميان درخواست ها يك نمايش ممتد را داراست و به عبارتى حالت فلش زدن به خود نمى گيرد.
 موقعيت Scroll را حفظ مى كند.
 فوكوس عضو دارنده فوكوس را نگه مى دارد.
آخرين صفحه درون تاريخچه (History) نگهدارى مى شود.
اين ابزار در حالت واقع گرايانه براى برنامه هايى كه ارسال به عقب(!) Postback فراوانى دارند طراحى شده است ولى با توجه به اين نكته كه محتواى صفحه نبايد زياد تغيير نكند. احتمالا بنا به دلايل كارايى و نه اينكه در تغييرات زياد ايرادى بهم بزند - مترجم. شايد يك چيز شگفت آور در مورد اين ابزار اين باشد كه شما در حقيقت نياز به نوشتن هيج كد و برنامه اى نداريد.
نحوه استفاده:
Smart Navigation درون هدايت كننده صفحه (Page directive : <%@ %>)، براى تنظيم يك صفحه و درون web.config براى تنظيم كل برنامه استفاده مى شود. براى تنظيم در Page Directive به صورت زير عمل كنيد:
<%@ Page SmartNavigation=true % >
و براى تنظيم در web.config از ساختار زير استفاده نماييد:
< Configuration>
< System.web>
روش كار اينگونه است كه كل صفحه بدرون يك فريم دورنى مخفى (hidden IFrame) بارگذارى (load) مى شود و سپس فقط قسمت هاى تغيير كرده دوباره رندر(render) مى شوند.
upload کردن فايل به سرور در ASP.NET
کدهای مربوط به Upload کردن فايل به سرور را بايد به دو قسمت تقسيم نمود. قسمت اول شامل کدهايی است که نحوه نمايش در مرورگر را شامل می شوند و اساس آن بر HTML است. و قسمت دوم مربوط به طرف سرور است که شامل کدهايی است که با ASP.NET نوشته می شوند. برنامه زير حاوی کدهای مربوطه برای انجام اين کار به صورات خيلی ساده و ابتدايی می باشد. همانطور که ملاحظه می کنيد برخلاف ASP کلاسيک، نياز به وجود component خاصی نمی باشد و اين کار در ASP.NET بصورت خيلی ساده انجام پذير است.
Upload.aspx:
نشان دادن قابليتهای مرورگر در ASP.NET
اگرچه در حال حاضر جنگ مرورگرها تقريبا تمام شده است اما اين موضوع دليلی بر شناخته نشدن قابليتهای مرورگرها نيست. در اينجا توانايی ASP.NET در نشان دادن قابليتهای مرورگرها بحث شده است. بعنوان نمونه، مثال ۱ نوع مرورگر را به ما نشان می دهد.
< body>
You are using < % =Request.Browser.Type % >
< /body>< /html >
برای نمونه اگر شما از IE 5 استفاده می کنيد نتيجه خروجی چنين بايد باشد:
You are using IE5
در مثال ۱ Request.Browser.Type يک رشته را که همان نام ونسخه‎ی مرورگر است را بر می گرداند. اما اين موضوع چگونه صورت ميگيرد ؟
شئ HTTPBrowserCapabilities
در حقيقت خاصيت Browser در شئ Request کلاسی از HTTPBrowserCapabilities است که در فضانام System.Web قراردارد. وقتی که اين کلاس روی يک صفحه ASP.NET نمونه سازی می شود خواص صفحه سرويس گيرنده ای را نشان می دهد که از آن برای اجرا شدن کد استفاده شده است. شئ Request در برگيرنده اين خاصيت مرورگر است که اين کلاس را ميتوان معادل کلاس MSWC. BrowserCapabilities در ASP کلاسيک در نظر گرفت.
در ليست زير اکثر خاصيتهای شی HTTPBrowserCapabilities تشريح شده است:
ActiveXControls: نشان می دهد که مرورگر اکتيويکس را ساپورت می کند يا نه.
AOL: چک می کند که مرورگر از نوع AOL است يا نه.
Cookies: نشان می دهد که مرورگر کوکی ها را ساپورت می کند يا نه بايد توجه داشت که اين خاصيت وضعيت فعال بودن يا غير فعال بودن کوکی ها را نشان نمی دهد.
Crawler: نشان ميدهد که مرورگر سرويس گيرنده از موتورهای جستجو تاثير می پذيرد يا نه.
Browser: نوع مرورگر را نشان می دهد.
Frames: نشان می دهد که مرورگر از قابليت Frame برخورداراست يا نه.
MajorVersion: نسخه اصلی مرورگر را نشان می دهد بعنوان مثال در IE5 عدد 5 نشانگر نسخه اصلی است.
MinorVersion: نسخه جزيی (کوچکتر) مرورگر را نشان می دهد بعنوان مثال در IE5.1 عدد .1 نشانگر نسخه جزيی است.
Type: نوع ونسخه مرورگر را بصورت يک رشته بازميگرداند..
VBScript: نشان می دهد که مرورگر VBScript را ساپورت می کند يا نه.
Version: نسخه اصلی و جزيی مرورگر را بعنوان يک رشته برمی گرداند.
در زير نمونه کامل يک مثال آورده شده است.
< %@ page language="VB" % >
< %@ Import Namespace="System.Web" % >
< html >
< body >
< head >< title >HTTPBrowserCapabilities Demo< /title >< /head >
< %
Dim browserObj As HTTPBrowserCapabilities
browserObj = Request.Browser
% >
< font face="verdana, arial" size=2 >
< p >Your browser supports ActiveX controls: < %=browserObj.ActiveXControls % > < /p >
< p >Your browser type: <%=browserObj.Type % > < /p >
< p >Your browser version: <%=browserObj.Version% > < /p >
... Add any other property that you would like to display
< / font >
< /body >
< /html >
نحوه پردازش صفحات ASP.NET بر روي سرويس دهنده وب:
برنامه هاي وب از معماري سرويس گيرنده - سرويس دهنده تبعيت نموده و بر روي سرويس دهنده وب مستقر و مسئوليت پاسخگوئي به درخواست هاي ارسالي توسط سرويس گيرندگان را برعهده خواهند داشت .در سمت سرويس گيرنده ، مرورگر و در سمت سرويس دهنده ، سرويس دهنده وب داراي جايگاهي خاص مي باشند . مرورگر ، ميزبان برنامه وب بوده و مهمترين وظيفه آن ارائه بخش رابط کاربر يک برنامه وب است . در اين راستا ، مرورگر داراي پتانسيل لازم به منظور تفسير و نمايش تگ هاي HTML مي باشد .در سمت سرويس دهنده ، برنامه هاي وب با نظارت و مديريت يک سرويس دهنده وب ( مثلا" IIS ) اجراء مي گردند . سرويس دهنده وب ، مسئوليت مديريت برنامه ، پردازش درخواست هاي ارسالي توسط سرويس گيرندگان و ارائه پاسخ لازم به سرويس گيرندگان را بر عهده دارد .به منظور قانونمند کردن ارسال درخواست سرويس گيرندگان و ارائه پاسخ سرويس دهنده ، مي بايست از يک پروتکل ارتباطي خاص استفاده گردد. پروتکل ، مجموعه اي از قوانين لازم بمنظور تشريح نحوه ارتباط دو و يا چندين آيتم از طريق يک محيط انتقال ( زير ساخت انتقال داده ) نظير اينترنت است . در برنامه هاي وب ( ارسال درخواست توسط سرويس گيرنده و پاسخ به درخواست توسط سرويس دهنده ) از پروتکل ارتباطي HTTP)Hypertext Transport Protocol) ، استفاده مي گردد.
ASP.NET پلات فرم مايکروسافت براي طراحي و پياده سازي برنامه هاي وب در دات نت مي باشد . پس از درخواست يک صفحه ASP.NET توسط مرورگر سرويس گيرنده ، پردازش هاي متعددي بر روي سرويس دهنده وب به منظور ارائه پاسخ لازم ، انجام خواهد شد.شايد تاکنون سوالات مختلفي در رابطه با نحوه پردازش صفحات ASP.NET بر روي سرويس دهنده ، براي شما مطرح شده باشد :
پس از درخواست يک صفحه ASP.NET ، بر روي سرويس دهنده وب چه اتفاقي مي افتد ؟
نحوه برخورد سرويس دهنده وب با درخواست ارسالي توسط سرويس گيرنده چگونه است ؟
تگ هاي HTML چگونه توليد و براي مرورگر ارسال مي گردد؟
و شايد سوالات ديگر!
در اين مقاله با نحوه پردازش صفحات ASP.NET بر روي سرويس دهنده بيشتر آشنا شويم . بديهي است تشريح تمامي مراحل با ذکر جزئيات از حوصله يک مقاله خارج بوده و هدف آشنائي با کليات موضوع با يک روند مشخص و سيستماتيک است .
مرحله اول : ايجاد يک درخواست HTTP براي يک صفحه ASP.NET توسط مرورگر
پردازش با درخواست يک صفحه ASP.NET که توسط مرورگر ايجاد مي شود ، آغاز مي گردد .مثلا" يک کاربر ممکن است در بخش آدرس مرورگر کامپيوتر خود آدرس http://www.srco.ir//Articles/DocView.asp?ID=210 را به منظور دريافت اين مقاله وارد نمايد . مرورگر در ادامه يک درخواست HTTP را از سرويس دهنده وب محل استقرار سايت Srco.ir ايجاد و درخواست فايل حاوي مقاله را مي نمايد .
مرحله دوم : دريافت درخواست HTTP ، توسط سرويس دهنده وب
مهمترين وظيفه سرويس دهنده وب ، دريافت درخواست ارسالي HTTP و ارائه منبع درخواست شده درقالب يک پاسخ HTTP است . سرويس دهنده وب ( مثلا" IIS ) ، پس از دريافت درخواست ارسال شده توسط سرويس گيرنده ، تصميم لازم در رابطه با نحوه برخورد با آن را اتخاذ مي نمايد. محور تصميم گيري فوق بر پايه نوع انشعاب فايل درخواستي استوار مي باشد. مثلا" در صورتيکه فايل درخواستي داراي انشعاب asp. ، باشد ، IIS درخواست را به سمت asp.dll هدايت تا عمليات مرتبط با آن انجام شود . انشعابات فايل متعددي به موتور ASP.NET ، مپ مي گردند . برخي از آنان شامل موارد زير مي باشد :
انشعاب aspx . ، براي صفحات وب ASP.NET
انشعاب asmx . ، براي سرويس هاي وب ASP.NET
انشعاب config . ، براي فايل هاي پيکربندي ASP.NET
انشعاب ashx . ، براي هندلرهاي سفارشي ASP.NET HTTP
انشعاب rem . ، براي منابع راه دور
و ساير انشعابات ديگر
پس از دريافت درخواست ارسالي توسط سرويس گيرنده ، سرويس دهنده وب آن را در اختيار مسئول مربوطه قرار خواهد داد . مثلا" در صورتيکه درخواست دريافتي مربوط به يک صفحه ASP کلاسيک باشد ، درخواست در اخـتيار asp.dll گذاشته شده و يا در صورتيکه درخواست در ارتباط با يک صفحه ASP.NET باشد ، درخواست در اختيار موتور ASP.NET قرار داده مي شود . همانگونه که اشاره گرديد ، معيار اصلي در اين تصميم گيري ، نوع انشعاب فايل درخواست شده توسط سرويس گيرنده مي باشد .
مرحله سوم : عملکرد موتور ASP.NET
پس از درخواست يک صفحه ASP.NET توسط سرويس گيرنده و دريافت آن توسط سرويس دهنده وب ، درخواست دريافتي در اختيار موتور ASP.NET قرار داده مي شود . از موتور ASP.NET ، اغلب با نام ASP.NET HTTP pipeline ياد مي گردد. علت نامگذاري فوق ، بدين دليل است که درخواست دريافتي از بين تعداد متغيري از HTTP modules در بين مسير خود براي رسيدن به يک HTTP handler عبور مي نمايد . HTTP modules ، کلاس هائي مي باشند که امکان دستيابي به درخواست دريافتي را دارا مي باشند. اين ماژول ها قادر به بازبيني و بررسي درخواست دريافتي و اتخاد تصميماتي مي باشند که مستقيما" بر نحوه گردش داخلي ( روند برخورد با درخواست ) تاثير خواهد گذاشت . درخواست دريافتي پس از عبور از ماژول هاي مسخص شده HTTP ، به يک HTTP Handler خواهد رسيد . HTTP Handler مسئوليت ايجاد خروجي لازم به منظور ارسال براي مرورگر متقاصي ( ارسال کننده درخواست ) را برعهده دارد
تعداد زيادي از ماژول هاي HTTP از قبل ايجاد شده، بصورت پيش فرض در HTTP pipline وجود دارد:
OutputCache ، مسئوليت برگرداندن و Caching خروجي صفحات HTML در صورت نياز ، برعهده دارد .
Session ، ماژول فوق ، مسئوليت لود Session state را بر اساس درخواست دريافتي کاربر و روش Session که در فايل Web.config مشخص شده است ، برعهده دارد .
FormsAuthentication ، ماژول فوق ، مسئوليت تائيد کاربران بر اساس مدل تعريف شده Forms Authentication را در صورت ضرورت برعهده دارد .
و موارد ديگر .
به منظورآشنائي با ماژول هاي پيش فرض، مي توان مقادير نسبت داده شده به عنصر در فايل machine.config را مشاهده نمود. جدول زير مقدار پيش فرض عنصر را نشان مي دهد .
machine.Config: httpModules Section
Path : $WINDOWS$\Microsoft.NET\Framework\$VERSION$\CONFIG
< httpModules >
< add name="OutputCache" type="System.Web.Caching.OutputCacheModule"/ >
< add name="Session" type="System.Web.SessionState.SessionStateModule"/ >
< add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule"/ >
< add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule"/ >
< add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule"/ >
< add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule"/ >
< add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule"/ >
< add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule, System.Web.Mobile,
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/ >
< / httpModules >
هندلرهاي HTTP ، نقطه پايان در ASP.NET HTTP pipeline مي باشند . مسئوليت HTTP handler ، توليد خروجي براي منبع درخواست شده است . براي صفحات ASP.NET ، اين به معني Rendering ، کنترل هاي وب به HTML و برگرداندن HTML مي باشد. براي يک سرويس وب ، مسئوليت فوق ، شامل اجراي متد مشخص شده و Wrapping مقاير برگردانده شده به يک پاسخ مناسب و با فرمت SOAP مي باشد . منابع متفاوت ASP.NET از هندلرهاي متفاوت HTTP استفاده مي نمايند.هندلرهاي پيش فرص استفاده شده ، توسط بخش < httpHandlers > فايل machine.config مشخص شده اند. بخش فوق، شامل کلاس هائي است که يا خود HTTP handler بوده و يا HTTP handler factories ، مي باشند. يک HTTP handler factory ، صرفا" يک نمونه از يک HTTP handler را پس از فراخواني ، برمي گرداند . جدول زير ، اطلاعات عنصر در فايل machine.config را نشان مي دهد .
machine.Config: httpHandlers Section
Path : $WINDOWS$\Microsoft.NET\Framework\$VERSION$\CONFIG
< httpHandlers >
< add verb="*" path="trace.axd" type="System.Web.Handlers.TraceHandler"/ >
< add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory "/ > 
< add verb="*" path="*.resources" type="System.Web.HttpForbiddenHandler"/ >
< add verb="GET,HEAD" path="*" type="System.Web.StaticFileHandler"/ >
< add verb="*" path="*" type="System.Web.HttpMethodNotAllowedHandler"/ >
< /httpHandlers >
لازم است به اين نکته اشاره گردد که امکان ايجاد HTTP modules و HTTP handler اختصاصي ، توسط طراحان وپياده کنندگان برنامه هاي وب ASP.NET نيز وجود دارد . پس از ايجاد ماژول ها و هندلرهاي HTTP ، مي توان آنان را به pipeline ملحق تا براي تمامي سايت هاي وب موجود بر سرويس دهنده وب ، قابل استفاده گردند. بدين منظور، مي توان تغييرات لازم را در فايل machine.config اعمال تا زمينه استفاده از آنان توسط تمامي برنامه هاي وب فراهم گردد . در اين رابطه مي توان تغييرات را در فايل Web.config نيز اعمال نمود، در چنين مواردي امکان استفاده از ماژول ها و هندلرهاي HTTP ايجاد شده ، صرفا" براي يک برنامه وب وجود خواهد داشت .
مرحله چهارم : توليد خروجي
آخرين مرحله درارتباط با پردازش يک صفحه ASP.NET بر روي سرويس دهنده وب ، شامل ايجاد خروجي مناسب است . خروجي فوق ، در ادامه از طريق ماژول هاي HTTP عبور داده شده تا مجددا" به IIS برسد . در نهايت IIS ، خروجي توليد شده را براي سرويس گيرنده متقاصي ارسال مي نمايد .مراحل لازم به منظور توليد خروجي با توجه به HTTP handler متفاوت بوده و در ادامه صرفا" يک حالت خاص آن را بررسي مي نمائيم ( هندلر HTTP که از آن به منظور rendering صفحات ASP.NET استفاده مي گردد).
سرويس دهنده وب (IIS) پس از دريافت درخواستي براي يک صفحه ASP.NET ( انشعاب فايل aspx.) ، آن را در اختيار موتور ASP.NET ، قرار خواهد داد. درخواست دريافتي در ادامه از بين ماژول ها عبور داده شده تا به PageHandlerFactory برسد ( در بخش < httpHandlers > فايل machin.config که قبلا" mapping آن انجام شده است ) .
machine.Config: httpHandlers Section :PageHandlerFactory
Path : $WINDOWS$\Microsoft.NET\Framework\$VERSION$\CONFIG
< httpHandlers >
< add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"/ >
< /httpHandlers >
کلاس PageHandlerFactory ، يک HTTP handler factory است که وظيفه آن ارائه نمونه اي از يک HTTP handlerبوده که قادر به برخورد مناسب با درخواست ارسالي است.مهمترين رسالت PageHandlerFactory ، يافتن کلاس ترجمه شده اي است که نشاندهنده صفحه ASP.NET درخواستي مي باشد. در صورتيکه از ويژوال استوديو دات نت به منظور ايجاد صفحات ASP.NET استفاده مي گردد ، صفحات وب از دو فايل جداگانه ( يک فايل با انشعاب aspx . ، شامل صرفا" کنترل هاي وب و تگ هاي HTML و يک فايل aspx.vb و يا aspx.cs شامل کلاس code-behind ( کد سمت سرويس دهنده ) ) ، تشکيل مي گردند. در صورتيکه از ويژوال استوديو دات نت استفاده نمي گردد ، مي توان از يک بلاک سمت سرويس دهنده
آشنائی با فرم‌های وب در ASP.NET
به عنوان یک برنامه نویس ویژوال بیسیک شما می توانید برنامه های تحت اینترنت نیز بنویسید. به طور معمول برنامه نویسان ویژوال بیسیک به سمت ASP که یک تکنولوژی از مایکروسافت است متمایل هستند. دلیل این امر هم شباهت میان VB و VBScript می باشد. بزرگترین ایرادی که ASP کلاسیک دارد نداشتن یک محیط ویژوال مانند فرم‌های معمولی بیسیک است. مایکروسافت با Visual InterDev سعی کرد این کمبود را جبران کند اما چندان موفق نبود. بالاخره در ویژوال بیسیک دات نت ترکیبی از InterDev و ویژوال بیسیک وجود دارد و امکانات فرم‌های ویژوال بیسیک را برای اینترنت نیز فراهم می کند.
Web Form ها یکی از اجزای تکنولوژی ASP.NET است که به برنامه نویس های اکثر زبان ها این امکان را می دهد که یک قالب ویژوال با HTML و یک محیط برنامه‌نویسی تحت سرور با کدهای پیشرفته داشته باشند.
Web From ها در عمل
بهترین راه برای فراگیری این تکنولوژی یک مثال عملی از آن است. پس از مثال معروف Hello World برای شروع استفاده می کنیم.
آماده سازی محیط
قبل از شروع ابتدا باید نرم‌افزارهای مورد نیاز را از روی لیست زیر نصب کنید. اگر ویژوال استودیو دات نت را به شکل کامل و بر روی ویندوز 2000 یا اکس پی نصب کردید احتیاج به مراحل زیر ندارید.
 سیستم عامل شما باید حتما ً از نوع ان تی باشد، ویندوز 2000 (سرور یا Professional)، ویندوز اکس پی Professional و یا ان تی سرور 4.
 باید NET Framework. بر روی سروری که می خواهید با آن کار انجام دهید یا برنامه شما بر روی آن اجرا خواهد شد نصب شده باشد. اگر ویژوال استودیو دات نت را نصب کرده اید مشکلی در این مرحله ندارید.
 مایکروسافت توصیه کرده که سیستم فایل هارد دیسک سرور شما بهتر است NTFS باشد، هم به دلیل مسائل امنیتی و هم سرعت بیشتر.
Hello World
در فرم مخصوص ایجاد یک پروژه جدید ASP.NET Web Application را انتخاب کنید و نام آن را HelloWorld قرار دهید. دقت کنید که مکان ذخیره پروژه http://localhost باشد.
سپس بر روی کلید OK کلیک کنید تا یک Solution جدید ایجاد گردد. به طور قراردادی ویژوال استودیو یک Web Form با نام WebForm1.aspx ایجاد می کند. دقت کنید که پسوند فایل چه تغییری کرده است.
وقتی بر روی کلید OK کلیک می کنید چند عمل در پشت صحنه انجام می شود. به غیر از ایجاد کردن یک شاخه در دایرکتوری Visual Studio Projects، ویژوال استودیو یک Web Application نیز در سروری که انتخاب کرده اید ایجاد می کند. بر روی سرور، ویژوال استودیو دات نت:
 یک دایرکتوری با نام پروژه در شاخه inetpub/wwwroot ایجاد می کند. این دایرکتوری را به عنوان یک IIS Application معرفی کرده و اجازه اجرای Script را بر روی آن می دهد. اگر FrontPage Server Extensions را نصب کرده باشید یک FrontPage Web ایجاد می کند تا با FrontPage هم بتوانید به آن دسترسی داشته باشید.
می توانید همانگونه که با فرم های معمولی ویژوال بیسیک کار می کردید از Web Formی که جلوی شما است استفاده کنید، یعنی به شما امکان استفاده از Toolbox و استفاده از کامپوننت های درون آن بر روی Web Form داده شده است. یک Label را از Toolbox برداشته و بر روی قسمت بالای فرم قرار دهید و خاصیت Text آن را به Hello World تغییر دهید.
برای این مثال تمام کاری که لازم بود انجام شود را انجام دادیم. حالا می توانیم برنامه را اجرا کنیم. قبل از اینکار از Toolbar و در قسمت Solution Configuration به جای Debug ،Release را انتخاب کنید. حالا بوسیله کلید F5 برنامه را اجرا کنید. اگر هیچ مشکلی در سیستم نباشد باید صفحه مرورگر باز شود و فایل WebForm1.aspx نمایش داده وبر روی آن Hello World نوشته شود.
بر روی صفحه مرورگر کلید سمت راست موس را بزنید و View Source را انتخاب کنید تا ببینید چه مطالبی در سورس این صفحه آمده است. همانطور که می بینید کدهایی به HTML است که بوسیله فایل aspx در زمان اجرا ایجاد شده است. همانطور که می بینید یک HTML Form در این متن دیده می شود در حالی که ما چنین چیزی را اضافه نکرده بودیم، درباره این مساله در ادامه توضیح خواهم داد. Labelی که اضافه کرده بودیم در تگ Span قرار دارد. تگ Span مانند یک Container برای Label ما است و اطلاعات آن را در خود نگهداری می کند. به ویژوال استودیو دات نت باز می گردیم. همانطور که دیدید Web Form ها خیلی شبیه فرم های معمولی ویندوز هستند. در Web From جدیدی که می سازیم این خاصیت را بیشتر امتحان می کنیم. در برنامه Hello World که ایجاد کردیم تنها یک Web Form داشتیم: WebForm1.aspx. یک Web Form دیگر می سازیم تا کارهای بیشتری با آن انجام دهیم. منوی Project | Add Web Form را انتخاب کنید. در فرمی که باز می شود Web Form را انتخاب کنید و مطمئن شوید که نام آن WebForm2.aspx است. (قبل از این کار ویژوال استودیو را از حالت اجرای برنامه خارج کنید)
بر روی Open کلیک کنید تا WebForm2.aspx در Solution ایجاد شود. بر روی WebForm2.aspx در Solution Explorer دو بار کلیک کنید تا مطمئن باشید که فرمی که تازه ایجاد کرده اید فعال است. مانند مثال قبلی یک Label بر روی فرم قرار دهید، سپس یک Button در زیر آن قرار دهید و اندازه هر دو را یکسان کنید. بر روی Label کلیک کنید و از پنجره Properties خاصیت ID را انتخاب کنید و آن را به lblText تغییر دهید. سپس بر روی کلید کلیک کنید و ID آن را به btnSubmit تغییر دهید. بر روی کلید یک بار کلیک کنید، سپس کلید Enter را بزنید تا به قسمت نوشتن کد برای این کلید وارد شوید.
در ASP.NET هر کدام از کنترل ها، کدی در پشت صحنه برای خود دارند. همانطور که مشاهده می کنید یک روال با نام btnSubmit_Click وجود دارد که هنگامی که بر روی کلید کلیک می شود اجرا می شود. کدی که در این روال نوشته شده باشد در سرور اجرا می شود و نه در مرورگر کامپیوتر کاربر. کد زیر را در روال مورد بحث بنویسید:
lblText.Text = "Hello World"
همانطور که مشاهده کردید IntelliSense وارد عمل شده و وقتی بعد از lblText، نقطه را تایپ کردید لیستی از خواص و متد های مربوط به Label را به شما نمایش داد. این خاصیت در InterDev هم وجود دارد ولی در ویژوال استودیو دات نت از امکانات بیشتر و لیست پرمحتواتری برخوردار است.
پنجره کد را ببندید و به قسمت طراحی Web Form بروید، خاصیت Text کلید را به Submit تغییر دهید. حالا برنامه را امتحان می کنیم. اگر سعی کنید تا برنامه را بوسیله کلید F5 اجرا کنید دوباره WebForm1.aspx نمایش داده خواهد شد، زیرا که این فرم، فرم ابتدایی در پروژه ما است. برای اینکه WebForm2.aspx به فرم ابتدایی تبدیل شود در پنجره Solution Explorer بر روی WebForm2.aspx کلید سمت راست موس را بزنید و سپس Set As Start Page را انتخاب کنید. حالا می توانید برنامه اجرا کنید.
Web Form جدید، WebForm2.aspx در مرورگر اینترنت نمایش داده می شود در حالی که بر روی آن یک Label و یک کلید وجود دارد. بر روی کلید کلیک کنید تا متنی که تایپ کرده بودید در Label نمایش داده شود. همانطور که می بینید برنامه مانند فرم های معمولی ویندوز اجرا می شود.
ارسال ایمیل در ASP.NET با استفاده از HTML Template
آیا تاکنون سعی کرده اید برای سایت خود خبرنامه ایجاد کنید؟ آیا تاکنون وسوسه شده اید که سیستمی طراحی کنید که در صورتی که بینندگان سایت شما نظرات خود را در سایت شما وارد کنند برای آنها یک Email تشکرآمیز ارسال کنید؟ آیا می دانید ساختن یک HTML Template زیبا برای خبرنامه شما و استفاده همیشگی از آن جهت ارسال خبرنامه در ASP.NET بسیار ساده صورت می گیرد؟ چنانچه سوالات بالا شما را به دانستن بیشتر ترغیب کرده است به شما تبریک می گویم! چرا که در ادامه این مقاله شما روش بسیار ساده ارسال Emailهای HTML زیبا را بدون اینکه نگران چگونگی کدنویسی HTML متغیر رشته ای Body در MailMessage باشید را فرا خواهید گرفت.
برای شروع بیایید به روش کار نظری بیاندازیم: خوب احتمالا شما با روش ساختن یک نمونه از آبجکت MailMessage که در ASP.NET برای ارسال Email استفاده می شود آشنایی دارید (اگر این چنین نیست در ادامه مقاله به طور اجمالی توضیحاتی ارائه شده است) تنها قسمتی که باید مورد توجه قرار دهید این است که چگونه می توانیم Body نامه خود را به فرمت HTML و بدون نیاز به اینکه تمامی تگها را پشت سر هم در یک رشته طولانی و سردرگم کننده تایپ کنیم، درآوریم. یک ایده جالب این است که ما Template نامه خود را با استفاده از ادیتورهای WYSIWYG مثل FrontPage یا Dreamweaver طراحی کنیم و سپس تمامی کدهای HTML آن را درون یک متغیر رشته ای Import کرده و از آن استفاده کنیم. این کار بسیار آسان است. اما می توان این نامه را برای هر کاربر کمی سفارشی (Customize) کرد! برای مثال شما می توانید در ابتدای نامه کاربر را با نام وی مورد خطاب قرار دهید. بهتر است از این پس توضیحات را همراه با کدنویسی دنبال کنیم. (کلیه کدهای Server Side به زبان VB.NET نوشته شده است) سه گام اساسی برای این کار وجود دارد:
ساختن Template مورد نظر شما جهت ارسال Email:
برای این کار کافی است که Template مورد نظر خود را به فرمت HTML طراحی کنید. این به خود شما بستگی دارد که کدهای HTML را به صورت دستی بنویسید و یا از ادیتورهای WYSIWYG مانند FrontPage یا Dreamweaver یا !GoLive استفاده کنید. تنها تفاوتی که در اینجا وجود دارد این است که شما بایستی قسمتهایی از متن نامه خود را که متغیر هستند (مانند نام گیرنده Email، آدرس پست الکترونیکی وی و ...) را به گونه ای از بقیه قسمتها متمایز کنید. برای مثال اگر شما می خواهید در ابتدای نامه، دریافت کننده نامه را با نام خود مورد خطاب قرار دهید عبارت را به صورت زیر وارد کنید: "سلام "#NAME# لطفا توجه کنید که هیچ محدودیتی در تکنیک به کار رفته وجود ندارد و قرار دادن کاراکترهای ## فقط جهت متمایز ساختن این قسمت از محتوای استاتیک صفحه است و شما می توانید به صور دیگر آن را مشخص کنید مثلا ?NAME? یا هر چیز مشابه دیگر. این قسمت بعدا با نام شخص مورد نظر ما جایگزین می شود. نکته قابل ذکر دیگر اینکه چنانچه قصد دارید نامه خود را فارسی ارسال کنید تگ زیر را فراموش نکنید:
< meta http-equiv = " Content-Type " content = " text / html; charset = utf-8 " >
خواندن فایل Template جهت قراردادن در Body نامه شما:
پس از اینکه Template را آماده نمودید بایستی این فایل را بخوانید، قسمتهای مورد نظر (متمایز شده با ##) را با عبارات مورد نظر خود (که می توانید از Database استخراج کنید) جایگزین کنید و این متن را به صورت یک متغیر رشته ای در Body نامه خود قرار دهید (گام 3). این کار به وسیله کد زیر صورت می پذیرد: (قبل از هر چیز شما بایستی Namespace مورد نیاز که در اینجا System.IO می باشد را Import کنید)
Imports System.IO
Dim reader As StreamReader
Dim strFileName As String = Server.MapPath( " templatel.htm " )
Dim strFileT ext
reader = File.OpenText( strFileName )
While reader.Peek < > -1
strFileText + = reader.ReadLine( )
End While
reader.Close()
strFileText = Replace( strFileText, "#Username#", Name.Text)
strFileText = Replace(strFileText, "#MsgID#", Request("MsgID" ))
strFileText = Replace(strFileText, "#AuthorID#", Request("AuthorID" ))
حال بیایید نگاهی به کد فوق بیاندازیم: در سطر اول شما یک شی از نوع StreamReader که جهت خواندن فایلهای متنی به کار می رود را می سازید و در سطر بعدی مسیر فیزیکی فایل Template خود را در متغیر رشته‌ای strFileName ذخیره می کنید.
نکته: در صورتیکه بخواهید در فایل کلاس خود از کد فوق استفاده کنید بایستی مسیر فیزیکی فایل را با استفاده از System.Web.HttpContext.Current.Server.MapPath("template.htm") به دست آورید. اما در Code Behind یک WebForm همان Server.MapPath() کافی است.
سپس در سطر بعدی ما با استفاده از متد OpenText فایل مورد نظر را باز کرده و متن آن را در Reader قرار می دهیم. حال در یک حلقه While...End While سطر به سطر فایل Template را (که در اینجا کدهای HTML ما هستند) می خوانیم و در متغیر strFileText ذخیره می کنیم. Reader.Peek <> -1 بررسی می کند که آیا به انتهای فایل رسیده ایم یا خیر. پس از اینکه کل فایل را خوانده و در متغیر ذخیره کردیم. شی reader را می بندیم.
در اینجا شما باید Template نامه خود را برای کاربر خاص Customize کنید. یعنی عبارات محصور شده با ## را با اطلاعات کاربر (که از بانک اطلاعاتی استخراج می شود و یا از یک Query String دریافت می شود) جایگزین کنید. در مثال بالا مقدار اول در Template با مقدار یک Textbox و دو مورد بعدی با Query String های انتهای یک URL جایگزین می شود. حاصل کار یک متغیر رشته ای به نام strFileText است که حاوی کد HTML مورد نیاز شما برای ارسال یک HTML Email می باشد. که مثلا عبارت ابتدای آن به صورت زیر در آمده است: "سلام مهدی"
استفاده از قالب Import شده فوق و ارسال Email:
حال به آسانی Email را ساخته و ارسال می کنیم. بدین ترتیب: (Imports System.Web.Mail را فراموش نکنید!)
'Creating and sending mail to user
Dim objMail As New MailMessage()
objMail.From = "You@YourDomain.com"
objMail.To = Email.Text.Trim
objMail.Subject = "YOUR SUBJECT GOES HERE..."
objMail.BodyFormat = MailFormat.Html
objMail.BodyEncoding = System.Text.Encoding.UTF8
objMail.Body = strFileText
SmtpMail.SmtpServer = "smtp.YOURSERVER.com"
SmtpMail.Send(objMail)
این قسمت نیاز به توضیخ چندانی ندارد. جز اینکه objMail.To را بایستی به صورت داینامیک (از DB و ...) تغییر دهید (در اینجا مقدار از یک Textbox دریافت شده است)، SMTP Server خود را مشخص کنید و Email را ارسال کنید! به همین سادگی. بقیه موارد بسیار واضح هستند.
لطفا به این نکته توجه کنید که برخی SMTP Serverهایی که نیاز به Authentication دارند را نمی توان برای این منظور (ارسال Email به آدرس های خارج از SMTP Server فوق) مورد استفاده قرار داد. در این خصوص لطفا به Administrator سرور خود رجوع کنید. 

آموزش ASP عملگرهای VBScript   

 در این مقاله در مورد عملگرها بحث خواهیم نمود که جزئی از مهم ترین و پرکاربرد ترین مباحث VBScript میباشد. عملگرها به ما اجازه می دهند که با داده ها کار کنیم و آنها را ترکیب کنیم تغییر دهیم و یا جایگزین کنیم. ۵ کلاس اصلی از عملگر ها وجود دارند که ما در مورد آنها بحث خواهیم کرد. اولین نوع آنها عملگر انتساب(Assignment) میباشد که اکنون آن را ملاحظه خواهیم نمود:
● عملگر انتساب
ما در مورد متغیرها بحث کردیم و توضیح دادیم که داده ها در آنها ذخیره می گردند. اما درباره این که چگونه داده ها در متغیر ها ذخیره می شوند توضیحی داده نشد.عادی ترین راه برای ذخیره داده های متغیرها استفاده از عملگر انتساب می باشد. عملگر انتساب در VBScript علامت مساوی (=) می باشد. عملگر انتساب هر چیزی که در سمت راست آن قرار بگیرد در متغیری که در سمت چپ آن قرار می گیرد ذخیره می کند.
برای مثال کدهای زیر را در نظر بگیرید:
<%
Dim MyVariable
MyVariable = ۳
MyVariable = ۵
%>
اگر شما قبلا برنامه نویسی نکرده باشید ممکن است از این که متغیر MyVariable در یک لحظه هم مقدار ۳ و هم مقدار ۵ را گرفته است متعجب شده باشید. باید دقت نمایید که عملگر انتساب را با مشابه آن در مبحث ریاضیات اشتباه نگیرید. جمله سوم می گوید که متغیر MyVariable برابر ۵ می باشد. این جمله در داخل متغیر MyVariable مقدار ۵ را ذخیره می کند.
به منظور یک دوره کوتاه ما خط به خط این کدها را مورد بررسی قرار می دهیم.
دردومین خط همان طور که قبلا توضیح داده شد یک متغیر تعریف شده است. در این هنگام یک مقدار Empty در داخل متغیر MyVariable ذخیره می گردد. در خط بعد مقدار ۳ به متغیر MyVariable تخصیص داده می شود. بنابراین در داخل جعبه ای که دارای بر چسب MyVariable میباشد هم اکنون مقدار ۳ وجود دارد. در انتها مقدار ۵ به متغیرMyVariable تخصیص داده می شود. مقدار ۳ که وجود داشت اکنون از بین می رود!
به این نکته در هنگام برنامه نویسی دقت کنید که در داخل متغیر ها هرگز مقادیر جدیدی را جایگزین ننمایید تا زمانی که اطمینان حاصل کنید کارتان با مقدار قبلی تمام شده است. اگر مسلم شد که به جایگزینی یک مقدار برای استفاده بعدی نیاز دارید ممکن است یک متغیر دومی را ایجاد کنید و آن را به شکل زیر نگهداری نمایید:
<%
Dim MyVariableX, MyVariableY
MyVariableX = ۳
MyVariableY = MyVariableX
MyVariableX = ۵
%>
در اینجا خط دوم با دو متغیر تعریف شده است MyVariableX و MyVariableY. در ابتدا در هر دو مقدار Empty قرار داده می شود.
در خط بعد مقدار ۳ در داخل MyVariableX قرار داده می شود. مقدار دهی تنها با مقادیر صریح مثل ۳ یا ۵ انجام نمی گیرد بلکه با متغیر ها نیز صورت می گیرد. در نهایت در هر دو متغیر MyVariableY و MyVariableX مقدار ۳ ذخیره می گردد.
سرانجام در داخل MyVariableX مقدار ۵ قرار داده می شود. این مساله بر روی متغیر MyVariableY تاثیری ندارد. خط ۳ هر چه که در داخل MyVariableX وجود دارد به داخل MyVariableY کپی می کند اما این کار هیچ نوع ارتباط دائمی بین دو متغیر MyVariableX و MyVariableY ایجاد نمی کند با این کار MyVariableX با مقدار جدید مورد استفاده قرار می گیرد. اما اگر شما هنوز به مقدار قبلی نیاز داشته باشید از طریق MyVariableY به آن دسترسی خواهید داشت.
اکنون به آخرین نسخه ازین کدها نگاه کنید:
<%
Dim ivar
ivar = ۳
۵ = ivar
%>
آیا فکر می کنید این کد ها کار میکند؟ (اولین پاراگراف مربوط به عملگرهای انتساب را در صورتی که اطمینان ندارید دوباره بخوانید.)
جواب منفی است. این کدها معتبر نمی باشد. دو خط اول قابل انتظار می باشد اما خط سوم بی معنی است. عملگر انتساب هر چه که در سمت راست آن قرار دارد در داخل متغیر سمت چپ کپی می کند.در این نمونه عدد ۵ یک متغیر نیست و در سمت چپ قرار دارد. عدد ۵ نمیتواند به عنوان نام یک متغیر به کار رود زیرا نام متغیر ها باید با یک حرف آغاز شود.
ما از نوع integer در این مثال ها استفاده نموده ایم اما می توانستیم از انواع دیگر استفاده کنیم. عملگر انتساب با نوع های Booleans, Strings, doubles, singles به خوبی کار می کند:
StrName = "X"
Bol_The_Assignment_operator_Is_Powrful = True
Dtjills_Birthday = #۰۳/۰۶/۱۹۴۶#
نکته: محصور کردن داده با علامت # داده را به سه قسمت ۳ و ۶ و ۱۹۴۶ تقسیم می کند.
ممکن است متوجه شده باشید که در لیست قبل از عملگر انتساب استفاده شده است. لیست زیر یک نسخه تغییر یافته از این کد ها می باشد که عملگر انتساب را با کمی تغییر نشان میدهد.
نام فایل را AssignmentDemo.asp بنامید:
<% @ Language="VBScript" %>
<% Option Explict
Dim strName, iAge
%>


<%
Response.Write("Before assigning a value, strName has value ")
Response.Write(strName)
%>


<%
strName= "James"
iAge = ۲۱
Response.Write( "Now strName has value ")
Response.Write(strName)
%>


<%
Response.Write( "Now iAge has value " )
Response.Write(iAge)
%>


● تجزیه:
خط ۳ دو متغیر را به نام های StrName و iAge تعریف کرده است. خطوط ۸ و ۹ یک پیغام را می نویسد که نشان می دهد که StrName قبل از این که ما از عملگر انتساب استفاده نماییم چه مقداری داشته است.
خطوط ۱۳ و ۱۴ مقادیر ۲ متغیر را تنظیم می کنند. خطوط ۱۵ و ۱۶ مقدار جدید داده شده به متغیر StrName را نشان می دهند. به خروجی نگاه کنید شما می توانید هم اکنون تایید کنید که عمل انتساب درست صورت گرفته است. خطوط ۲۰ و ۲۱ به طور مشابه مقدار جدید داده شده به متغیر iAge را نشان می دهد.

معرفی اوليه  VB.NET

يک برنامه کامپيوتری ، از مجموعه ای دستورالعمل که نوع و نحوه انجام يک فعاليت را برای کامپيوتر مشخص می نمايند ، تشکيل می گردد. دستورالعمل های نوشته شده بعنوان نمونه ممکن است به کامپيوتر اعلام نمايند  که تعدادی از اعداد را با يکديگر جمع  و يا دو عدد را بايکديگر مقايسه و بر اساس نتيجه  بدست آمده ، اتخاذ تصميم نمايد. دستورالعمل های نوشته شده ، صرفا" برای کامپيوتر قابل فهم و اجراء خواهند بود.کامپيوتر دستورالعمل های نوشته شده را اجراء و ماحصل آن رسيدن به اهدافی خواهد بود که بر اساس آن برنامه طراحی و پياده سازی  شده  است . دستورالعمل ها  ، می بايست با استفاده از يکی از زبانها ی برنامه نويسی نوشته شده ( کد ينگ ) و در ادامه در اختيار کامپيوتر قرار داده شوند. زبانهای برنامه نويسی متعددی نظير : فرترن ، بيسيک ، کوبال ، پاسکال، ،C ، جاوا ، ويژوال بيسيک و  ... وجود دارد.
 برنامه نويسی کامپيوتر ، مشابه آموزش گره زدن کفش به کودکان  است . برای نيل به هدف فوق ، می بايست تمامی مراحل لازم  بصورت شفاف به کودکان آموزش داده شود . کودکان با دنبال نمودن دستورالعمل های ارائه شده ، قادر به گره زدن کفش خود خواهند بود ( روش انجام اين کار برای آنان مشخص شده و بر اساس آن ، امکان نيل به هدف مورد نظر توسط کودکان فراهم می گردد )  . VB.NET ، زبانی است که می توا ن نحوه نيل به يک خواسته را بکمک آن بصورت شفاف ( نظير آموزش گره زدن کفش به کودکان )  مشخص و کامپيوتر با دنبال نمودن مراحل مشخص شده ، خواسته مورد نظر را محقق نمايد. با استفاده از VB.NET ، می توان محصولاتی راايجاد  که زمينه استفاده از آنان  در محيط ويندوز و اينترنت ، وجود خواهد داشت . فراموش نکنيم در زمان فراگيری يک تکنولوژی در ابتدا می بايست شيوه راه رفتن را بياموزيم  و در ادامه اقدام به دويدن نمود .
VB.NET يکی از زبان های  حمايت شده در دات نت می باشد . با استفاده از زبان فوق علاوه بر اينکه می توان برنامه های مبتنی بر ويندوز را پياده سازی نمود ، امکان استفاده از آن بعنوان زبان مورد نظر در زمان ايجاد برنامه های مبتنی بر وب که از تکنولوژی ASP.NET استفاده می نمايند ، نيز وجود خواهد داشت . با توجه به اهميت و جايگاه خاص اين زبان  در دات نت ، مجموعه مقالاتی در رابطه با آموزش اصولی اين زبان آماده شده که بتدريج بر روی سايت قرار خواهند گرفت . در اولين مقاله از اين مجموعه به معرفی اوليه VB.NET خواهيم پرداخت . در ابتدا لازم است با  ويژگی های منحصر بفرد برنامه های مبتنی بر ويندوز در قياس با برنامه های مبتنی بر DOS ، آشنا شده و پس از مروری مختصر به روند شکل گيری نسخه های متعدد ويژوال بيسيک ، با نحوه نصب آن نيز آشنا شويم .

برنامه نويسی مبتنی بر DOS در مقابل ويندوز برنامه نويسی مبتنی بر  ويندوز دارای تفاوت های عمده ای نسبت به برنامه نويسی سنتی در محيط DOS است.برنامه های  DOS ،  مسيری دقيق و مشخص  را ازابتدا تا پايان دنبال می نمايند . رويکرد فوق ، باعث بروز محدوديت هائی در رابطه با عملکرد برنامه ها  از يکطرف و تحميل محدوديت هائی به کاربران در طی نمودن مسير مشخص شده ، می گردد. از زاويه ای خاص می توان عملکرد  يک برنامه مبتنی بر  DOS را  مشابه قدم زدن در يک راهرو ( سالن )، در نظر گرفت . بمنظور رسيدن به نقطه انتهائی سالن ،  می بايست طول سالن  طی تا به انتهای آن رسيد . در اين راستا از موانع متعدد موجود در مسير ، می بايست عبور تا سرانجام به مقصد مورد نظر رسيد . در زمان پيمودن مسير ، صرفا"   امکان بازنمودن درب های خاصی  ، وجود خواهد داشت . ويندوز ، دنيای جديدی از برنامه نويسی مبتنی بر "رويداد"  را ايجاد نموده است . کليک نمودن موس ، تغيير اندازه پنجره ، تغيير محتويات يک  Textbox ، نمونه هائی از يک "رويداد" می باشند. کدهای  نوشته شده ، نحوه برخورد با يک رويداد را مشخص می نمايد.  برای رسيدن به انتهای يک سالن کافی است بر روی "انتهای سالن " ، کليک نمود و ديگر ضرورتی به پيمودن تمامی مسير تا رسيدن به انتهای سالن نخواهد بود . درصورتيکه به انتهای سالن رسيده باشيم و متوجه گرديم که اين مکان ، محلی نيست که انتظار آن را داشته ايم ، بسادگی می توان مقصد جديدی را برای خود انتخاب ، بدون اينکه ضرورتی به برگشت در نقطه آغازين مسير وجود داشته باشد. برنامه نوشته شده عکس العمل های لازم در ارتباط با حرکت شما  را بهمراه عمليات مربوطه بمنظور تکميل فعاليت ها ی مورد نظر انجام خواهد داد .  با استفاده از VB.NET ، می توان کدهای لازم بمنظور ارائه عکس العمل لازم در زمان تحقق يک رويداد را نوشت .در اين راستا ، برنامه نويسان می توانند  کدهای لازم  در رابطه با رويدادهائی که امکان  تحقق آنها وجود دارد را نوشته تا در زمان بروز رويداد مورد نظر ، عکس العمل لازم از طرف برنامه صورت پذيرد.در اين زمينه می توان از نوشتن کدهای ديگر بمنظور برخورد با رويدادهای غيرضروری ، صرفنظر کرد. مثلا" ويندوز قادر به تشخيص رويداد"کليک " از "کليک مضاعف " است . اين بدان معنی است که اگر می خواهيد برنامه مورد نظر شما ،عکس العمل لازم در ارتباط با رويداد  "کليک" را داشته باشد ، می بايست صرفا" کد مربوط به رويداد " کليک"،  نوشته گردد و الزامی به نوشتن کدهای  لازم بمنظور برخورد با رويداد  "کليک مضاعف" ، وجود نخواهد داشت . در دنيای برنامه نويسی DOS ، کاربر عکس العمل لازم را نسبت به برنامه انجام می دهد در صورتيکه در ويندوز ، برنامه ها عکس العمل لازم را با توجه به رفتار کاربران ، انجام خواهند داد .
يکی ديگر از مزايای مهم  برنامه های  ويندوز ، عدم وابستگی برنامه ها به يک سخت افزار خاص است . ويندوز تمهيدات لازم در خصوص ارتباط با سخت افزار را پيش بينی و برنامه نويسان نياز به آگاهی از نحوه عملکرد يک دستگاه سخت افزاری خاص بمنظور استفاده از آن ، نخواهند داشت . مثلا" برنامه نويسان ضرورتی به آگاهی از  نحوه عملکرد  هر نوع چاپگر ليزری، بمنظور ايجاد خروجی مورد نظر خود در برنامه ها ، نخواهند داشت. ويندوز، امکانات لازم در اين خصوص را از طريق ارائه روتين های عمومی که با درايورهای مورد نظر مرتبط می گردند ، فراهم می نمايد. شايد همين موضوع دليل موفقيت ويندوز باشد .
روتين های عمومی اصطلاحا" Windows (API ) Application Programming Interface ناميده می شوند .

 تاريخچه ويژوال بيسيک قبل از معرفی ويژوال بيسيک در سال 1991 ، پياده کنندگان نرم افزار مجبور به تسلط و مهارت در زمينه  استفاده از   ++C   بهمراه  موارد پيچيده ای در اين خصوص  بودند . بدين  ترتيب ، صرفا" افراد خاص آموزش ديده،  قادر به خلق نرم افزارهای قدرتمند  بمنظور اجراء در محيط ويندوز بودند. ويژوال بيسيک ، محدوديت فوق را تغيير و می توان اين ادعا را داشت که امروزه خطوط زيادی از برنامه های نوشته شده  با استفاده از ويژوال بيسيک کد شده است . ويژوال بيسيک ، ظاهر برنامه نويسی تحت ويندوز را با حذف عمليات اضافی برای نوشتن کدهای لازم جهت طراحی بخش رابط کاربر (UI) ، تغيير داده است . در اين راستا ،  زمانيکه بخش رابط کاربر ، ترسيم می گردد ، برنامه نويس می تواند کدهای لازم بمنظور انجام عکس العمل مناسب در رابطه با رويداد ها را به آن اضافه نمايد . زمانيکه ماکروسافت نسخه شماره سه ويژوال بيسيک را ارائه نمود ، مجددا" دنيای برنامه نويسی با تغيير مهمی مواجه گرديد. در اين راستا امکانات مناسبی برای نوشتن برنامه های مبتنی بر بانک های  اطلاعاتی ، در اختيار برنامه نويسان قرار گرفت. ماکروسافت بدين منظور محصول جديدی با نام DAO)Data Access Objects) را ارائه نمود . برنامه نويسان با استفاده از DAO ، امکان انجام عمليات متفاوت در رابطه با داده ها را ، بدست آوردند . نسخه های شماره چهار و پنج ، قابليت های نسخه سه را افزايش و اين امکان را  برای  پياده کنندگان نرم افزار فراهم نمود  تا برنامه های خود را جهت اجراء در محيط ويندوز 95 ، طراحی و پياده سازی نمايند . در اين زمينه ، برنامه نويسان قادر به نوشتن  کدهائی گرديدند که امکان استفاده از آنان  توسط ساير پياده کنندگان نرم افزار که از زبانی ديگر استفاده می کردند، فراهم گرديد. نسخه شماره شش ويژوال بيسيک ، روش جديدی بمنظور دستيابی به بانک های اطلاعاتی را ارائه نمود: ADO)ActiveX Data Objects )  . يکی از اهداف اوليه  طراحی  ADO ، امکان دستيابی به بانک های اطلاعاتی برای پياده کنندگان برنامه های مبتنی بر وب است که از تکنولوژی ASP ، استفاده می نمايند.
همزمان با ارائه جديدترين نسخه ويژوال بيسيک که VB.NET ناميده می شود ، بسياری از محدوديت های مرتبط با ويژوال بيسيک برطرف گرديد . در گذشته  ويژوال بيسيک با انتفادات  فراوان مواجه ( عدم وجود امکانات مناسب در مقايسه با جاوا و يا ++C ) و بسياری آن را نظير يک اسباب بازی در دنيای وسيع زبان های برنامه نويسی می پنداشتند. VB.NET با  غلبه بر مشکلات نسخه های پيشين ، توانسته است در مدت زمان کوتاهی ، بعنوان يک ابزار پياده سازی بسيار قدرتمند مطرح و گزينه ای مناسب برای برنامه نويسان در تمامی سطوح باشد .

نصب VB.NET برای نصب VB.NET ، از دو رويکرد متفاوت می توان استفاده کرد :

  • نصب بهمراه  ويژوال استوديو دات نت

  • نصب نسخه استاندارد

هر يک از گزينه های فوق ، امکان ايجاد برنامه های مبتنی بر ويندوز را فراهم می نمايند . مراحلی که در ادامه ذکر می گردد ، نحوه نصب ويژوال استوديو را تشريح  می نمايد .

  • مرحله اول : برنامه Setup.exe را از روی CD مربوطه فعال نمائيد.

  • مرحله دوم : جعبه محاوره ای ، مراحل و اولويت های عمليات  نصب را نشان خواهد داد. بمنظور صحت عملکرد  VB.NET ، چندين Component نصب و يا بهنگام خواهند شد . اولين مرحله نصب، بهنگام سازی عناصر (Components) است . بر روی گزينه Windows Component Update ، کليک نمائيد.

  • مرحله سوم : برنامه نصب در ادامه سيستم را بررسی تا نوع عناصری را که می بايست بهنگام گردند، مشخص گردد. دامنه فرآيند بهنگام سازی به وضعيت ماشينی که بر روی آن ويژوال استوديو دات نت نصب می گردد، بستگی خواهد داشت .

  • مرحله چهارم : با توجه به اينکه ممکن است در زمان بهنگام سازی لازم باشد چندين مرتبه سيستم راه اندازی گردد ، از شما درخواست نام و رمز عبور شده تا ضرورتی به نشستن و نگاه کردن به کامپيوتر و واکنش لازم ( درج نام و رمز عبور به سيستم ) پس از هر مرتبه راه اندازی سيستم نباشد .  بدين ترتيب در زمان راه انداری سيستم ،  عمليات مربوطه بصورت اتوماتيک و بدون نياز به تايپ نام و رمز عبور ، انجام خواهد شد . عمليات فوق ، اختياری است و در صورتيکه گزينه فوق انتخاب نگردد ، با هر مرتبه راه اندازی سيستم، پيام مناسب ارائه و می بايست واکنش لازم ( تايپ نام و رمز عبور)  را انجام داد .

  • مرحله پنجم : در اين مرحله با فشردن دکمه ! Install Now  ، بهنگام سازی عناصر (Components) آغاز می گردد . با اتمام هر يک از آيتم ها يک Check mark بمنزله اتمام مرحله مربوطه نشان داده می شود  . در مقابل عنصر جاری برای بهنگام سازی نيز يک فلش قرمز رنگ نسان داده می شود.

  • مرحله ششم : پس از بهنگام سازی عناصر ، مجددا" به صفحه اصلی Setup مراجعت و امکان نصب ويژوال استوديو دات نت فراهم می گردد.( کليک نمودن برروی گزينه Visiual Studio.NET )
    نکته : در صورتيکه قصد داريد که از طريق ماشين فوق ، يک برنامه تحت وب پياده سازی نمائيد ، لازم است IIS و FrontPage Extensions  قبلا" نصب شده باشد( بصورت پيش فرض در زمان نصب ويندوز 2000 نصب خواهد شد ) در صورتيکه ويژوال استوديو دات نت ، بر روی کامپيوتری نصب می گردد که دارای سيستم عامل ويندوز 2000 نسخه
    Professional  است ، با يک پيام خطاء مواجه خواهيم شد( عدم وجود عناصر لازم ) با فشردن دکمه Install Component ، عمليات نصب IIS و Frontpage Extensions انجام خواهد شد . در صورتيکه دکمه Continue ، انتخاب گردد ، در آينده نمی توانيد برنامه های تحت وب را بصورت محلی بر روی کامپيوتر خود پياده سازی نمائيد .

  • مرحله هفتم : نظير اکثر برنامه های نصب ، ليستی از گزينه های موجود ( شامل عناصر ) برای نصب در اختيار شما قرار می گيرد . شما می توانيد ، صرفا" آنچيزی را که بدان نياز داريد ، نصب نمائيد . مثلا" در صورتيکه ظرفيت درايو شما پايين و يا ضرورتی به استفاده از ويژوال ++C دات نت را نداريد ، می توان در اين مرحله از نصب آن صرفنظر کرد. هر گزينه ای که در اين مرحله انتخاب نمی گردد ، می توان در صورت ضرورت آن را در آينده نصب کرد. برای هر يک از امکاناتی  که قرار است نصب گردند ، سه بخش اطلاعاتی متفاوت نمايش داده می شود :
    بخش Feature Properties . فايل ها ی مورد نظر برای نصب و ميزان فضای مورد نياز را نشان می دهد .
    بخش Feature description . هر Feature چيست و چه عملياتی را انجام می دهد .
    بخش Space Allocation ، وضعيت  فضای ذخيره سازی هارد را  با توجه به گزينه های انتخاب شده ، نشان خواهد داد .
    نکته : زمانيکه ويژوال استوديو دات نت ، اجراء می گردد مجموعه ای از اطلاعات بين ديسک و حافظه مبادله می گردد . بنابراين لازم است به ميزان کافی ظرفيت آزاد  بر روی هارد ديسک وجود داشته باشد ، در اين راستا نمی توان دقيقا" مشخص نمود که به چه ميزان فضای آزاد نياز خواهد بود ولی حداقل يکصد مگابايت توصيه می گردد .

  • مرحله هشتم : ويژوال استوديو دات نت ، شامل مجموعه ای گسترده از فايل های مستندات ( راهنما )  است . در اين مرحله می توان تنظيمات لازم در خصوص اجرای مستندات از طريق CD و يا دايرکتوری نصب شده بر روی هارد را انجام داد . در اين زمينه می توان يک مسير بر روی هارد را مشخص تا مستندات نصب و يا گزينه Run From Source را انتخاب تا بر اساس آن مستندات همچنان بر روی CD باقی بمانند .

  • مرحله نهم : پس از انتخاب عناصر مورد نظر برای  نصب  ، با فشردن دکمه ! Install Now ، عمليات نصب آغاز می گردد . مدت زمان نصب ، بستگی به موارد انتخابی  و نوع سيستم دارد . مثلا"  نصب تمام ويژوال استوديو دات نت بهمراه تمامی مستندات بر روی يک ماشين با دارا بودن 256 مگابايت حافظه اصلی، سرعت  650 مگاهرتز و دوازده گيگابايـت هارد ديسک  ،  حدود يک ساعت طول خواهد کشيد .

  • مرحله دهم : پس از اتمام مرحله قبل ، با انتخاب گزينه Service Release ، بررسی لازم در خصوص بهنگام سازی  انجام می گيرد . اين عمليات از طريق اينترنت انجام خواهد شد . در اين زمينه به يک خط پرسرعت و مطمئن نياز خواهد بود .

پس از انجام مراحل فوق ، ويزوال استوديو دات نت بر روی سيستم نصب و محيط لازم برای نوشتن برنامه های VB.NET فراهم شده است

OCRچیست؟

OCRچیست؟

OCR که سررشته کلمات Optical Character Recognition می باشد، به تکنیکی اطلاق می شود که در طی آن یک برنامه کامپیوتری متون موجود درتصاویر دیجیتالی را شناسایی کرده و آنها را به صورت خودکار به فایلهای متنی قابل ویرایش تبدیل می کند.ترجمة مناسبی که در زبان فارسی برای نرم افزارOCR در نظر گرفته شده است نویسه خوان نوری می باشد و نام نویسه خوان آراکس نیز بر همین مبنا بوجود آمده است.

 

لزوم استفاده از OCR

 
فرض کنید شما یک متن کاغذی مانند نام، قرارداد، RFP، مقاله، کتاب و ... را در اختیار دارید و باید آن را وارد کامپیوترکنید تا در مطالعات خود یا تهیه گزارشات و ... مورد استفاده قرار دهید
 اولین راهی که به ذهن می رسد و متأسفانه تا کنون در مورد متون فارسی مورد استفاده قرار گرفته است، این است که متن موجود در این اسناد دوباره بوسیله اپراتور تایپ شود. بدیهی است این کار بسیار وقت گیر است، به علاوه وقتی بخواهیم حجم انبوه اسناد مکتوب را به صورت دیجیتال درآوریم ، این مشکلات نمود بیشتری خواهد داشت. دومین راهی که با گسترش فناوری اطلاعات در سالها ی اخیر در بسیاری از سازمانها مورد استفاده قرار گرفته است ، تصویر برداری از روی اسناد کاغذی به وسیله اسکنرها و انتقال تصاویر دیجیتالی تولید شده به سیستم های کامپیوتری می باشد.
 گر چه در این روش با ایجاد آرشیو الکترونیکی از اسناد بهبود نسبی در فرآیند نگهداری اسناد و دستیابی به آنها ایجاد شده است اما کماکان امکان جستجو در داخل متن این اسناد و بهره برداری از آنها وجود ندارد ، به عبارت دیگر تصاویر دیجیتالی اسناد که با استفاده از اسکنر بدست می آیند فاقد ارزش کافی می باشند مگر آنکه بتوان در متن آنها جستجو نمود.
نرم افزار OCR مشکل فوق را برطرف می کند، به این ترتیب که تصویر دیجیتال اسناد را دریافت کرده و با تحلیل محتوای آنها اطلاعات مختلف موجود را شناسایی کرده و با توجه به نوع آنها، فرآیند تبدیل خودکار تصویر به متن را انجام می دهد.


فناوریOCR

 
چنانچه فرآیندOCR  رابه صورت یک (Black Box) در نظر بگیریم ورودی آن تصویر سند مورد نظر و خروجی آن فایل دیجیتالی قابل ویرایش از اطلاعات سند (مثلاً به فرمت MS- Word) می باشد.



شکل زیر فرآیند OCR را با جزئیات بیشتری نشان می دهد. در این شکل مراحل مختلف OCR  که به صورت جعبه سیاه معرفی شده بودند ، تشریح شده است:


به عنوان مثال فرآیند OCR به ترتیب زیر انجام می شود.

با دریافت تصویر یک سند، ابتدا فرآیند، تحلیل محتوا می شود و نواحی مختلف اطلاعاتی در تصویر شناسایی می شوند.شکل زیر نمونه ای از تصویر یک سند را نشان می دهد که شامل 3 نوع ناحیه مختلف می باشد: ناحیه متنی، ناحیه تصویری و ناحیه جدول.

سپس با توجه به نوع ناحیه ، نویسه خوان آراکس اقدام لازم را انجام داده و اطلاعات موجود را شناسایی می کند:
 
- نواحی متنی پردازش شده ومتن موجود در آنها با حفظ نوع قلم خوانده می شوند.

 
- نواحی تصویری دقیقاً مانند تصویر ورودی حفظ می شوند.

 
- تک تک سلولهای جدول در نواحی جدولی شناسایی شده و متن درون آنها خوانده می شود. سپس به صورت یک جدول قابل ویرایش در خروجی قرار داده می شود.

در مرحله بعد نویسه خوان آراکس اطلاعات خوانده شده را در یک ویرایشگر استاندارد به شما نشان می دهد . می توانید با اعمال غلط یاب فارسی و انگلیسی، اشتباهات احتمالی را به سرعت تصحیح نمایید.

در انتهای فرآیند OCR، فایل خروجی که دارای کلیه اطلاعات سند ورودی است تولید می شود.

 


 مقایسهOCR فارسی با لاتین

برای زبانهای لاتین مانند انگلیسی و فرانسه از سالها قبل نرم افزارهای OCR بوجود آمده و سیر تکاملی خود را طی نموده اند. اما متأسفانه تا کنون برای زبان فارسی با تاریخ چند هزار ساله، نرم افزار OCR مناسب تولید نشده است.
 
 یکی از دلایل این امر پیچیدگی بالا و مشکل بودن ساختار و نوشتار زبان فارسی در مقایسه با زبانهای لاتین می باشد.به عنوان مثال از آنجا که در زبانهای لاتین نویسه ها (کاراکترها) به صورت مجزا از هم نوشته می شوند کار شناسایی آنها بسیار ساده است اما در زبان فارسی ابتدا باید کلمات (که دارای کاراکترهای متصل هستند) به کاراکترهای مجزا تبدیل شوند این فرآیند با توجه به تنوع قلم ها در زبان فارسی یکی از مشکل ترین بخش های سیستم OCR است.
نویسه خوان آراکس که حاصل سالها تلاش شبانه روزی در بخش تحقیق و توسعه شرکت هدی سیستم می باشد، بسیاری از مشکلات فرا روی OCR فارسی را برطرف نموده و پس از سالها، زبان فارسی را دارای یکی از قویترین نرم افزارهای OCR موجود کرده است. در این حال به منظور فراهم آوردن حداکثر امکانات، نویسه خوان آراکس به خوبی نرم افزار OCR لاتین می تواند متون انگلیسی را نیز بخواند، بعلاوه نویسه خوان آراکس قادر است متون و عبارات انگلیسی را در متون فارسی شناسایی کرده و آنها را بخواند

Write Amplification Factor

همانطور که در بخش اول مقاله دیدیم عملیات نوشتن در NAND-Flash ها بصورت عمده به اندازه یک بلاک در حافظه Flash بستگی دارد. بعنوان یک مثال ساده، نوشتن یک فایل 4KB روی یک Flash درایو معمولی منجر به این می شود که کنترل کننده آن با عملیات نوشتن روی کمترین واحد بلاک که 128KBاست مواجه شود، چرا که ممکن است آن بلاک شامل صفحات یا Page های غیر معتبر یا پاک شده باشد. این به آن معنی است که تمام سلولهای بلاک 128 کیلوبایتی باید در حافظه کش اصلاح شده و دوباره نوشته شوند، با اینکه فقط 4 کیلوبایت آن داده های واقعیست. با این توضیح می بینیم که عملیات نوشتن در عمل ممکن است اندازه ی بیشتری از آنچه را که ما به درایو فرستاده ایم در بر بگیرد.

قوانین SSD ها را بخاطر آورید; شما می توانید از یک Page بخوانید یا روی یک Page بنویسید اما باید یک بلاک را در آن واحد پاک کنید. اگر آن بلاک پر از صفحات غیر معتبر باشد (برای مثال فایلها توسط سیستم عامل OverWrite شده باشند) ، اول باید پاک شود تا بتوان روی آن نوشت.
الگوریتمهای پاک سازی بلاک ها در تمام SSD ها وجود دارد (یکی از مهمترین آنها TRIM است که در بخش قبلی مقاله توضیح دادیم) که در یک درایو نو کاربرد ندارند اما پس از گذشت چند روز، هفته یا ماه بعنوان یک بخش معمول درایوهای SSD فعال می شوند.

نمودار زیر را مشاهده کنید:
photo

مراحل عملیات نوشتن در SSD

در دیاگرام بالا از زاویه دیگری به آنچه که در هنگام رسیدن یک دستور نوشتن رخ می دهد نگاه می کنیم. برای نوشتن جدید از بلاکهای خالی استفاده می شود. (اگر موجود باشد) اما این تنها عملیات نوشتنی نیست که رخ می دهد، چرا که شما باید یکسری عملیات پاکسازی بلاکها (معروف به Garbage Collection) را هم انجام دهید تا بلاکهای خالی شما (به علت غیر معتبر شدن یک یا چند صفحه از صفحات آن) به اتمام نرسد یا عملیات TRIM بطور خودکار اینکار را انجام دهد.

بلاکی با بیشترین داده های غیر معتبر برای پاکسازی انتخاب می شود; داده های آن به بلاک دیگری کپی می شود و خود بلاک پاکسازی شده و به لیست بلاکهای معتبر افزوده می شود. در نمودار بالا در سمت چپ اندازه درخواست نوشتن را می بینید، اما در انتهای سمت راست اندازه واقعی داده های نوشته شده پس از عملیات پاکسازی را هم مشاهده می کنید. این تفاوت در مقدار درخواست شده برای عملیات نوشتن و مقدار واقعی نوشته شده را فاکتور ضریب نوشتن یا write amplification Factor می نامند.

write amplification Factor نسبت بین مقدار داده های ارسال شده برای نوشتن و مقدار واقعی مورد نیاز برای نوشتن روی فلش را بیان می کند. مقدار 1 برای این فاکتور مقدار آرمانی و کامل محسوب می شود، اما در عمل مقدار بالاتری برای فلش ها پیش بینی می شود. هر چقدر مقدار این فاکتور بیشتر باشد، درایو شما سریعتر خراب می شود و راندمان آن هم کمتر می شود. معیاری که زیاد خوشایند ما نیست.

این دلیلیست که کنترل کننده اینتل به بافر DRAM احتیاج دارد. در واقع اینتل آن را بعنوان حافظه کوتاه مدت برای ذخیره داده ها استفاده می کند و در نتیجه می تواند عملیات نوشتن را بطور موثرتر از کنترل کننده های دیگر اجرا کند. اینتل مقدار 1.1 را برای write amplification Factor در درایو X25-M اعلام می کند که به نسبت درایوهای معمولی همرده با مقدار 3، رقم خوبیست. سوال اینجاست که چگونه می توان از روی این مقدار عمر درایو SSD را تخمین بهتری زد؟