آشنایی با asp.net (بخش دوم)
فهرست مطالب
آخرین به روزرسانی در 21/10/2022
در این مقاله قصد ادامه ی آموزش بخش دوم آشنایی با asp.net را داریم.
در بخش اول آموزش ما مباحثی را مانند : رویدادها ، چرخه حیات ، برنامه نویسی سمت سرور
و کلاینت ، کنترلر ها و .. شرح دادیم.
در این بخش قصد ادامه ی آموزش و پرداختن به سربخش های تخصصی تر را داریم.
(پیش نیاز این مقاله ، مقالات آشنایی با سی شارپ و آشنایی با asp.net (بخش اول) می باشد.)
Managing State
هنگامی که به هر شکل و به هر دلیلی ارتباط کلاینت از سرور قطع می شود، موتور ASP.NET آبجکت های صفحه را دور می زند.
به این ترتیب، هر برنامه وب میتواند برای ارائه درخواستهای متعدد به طور همزمان، بدون اینکه حافظه سرور تمام شود، افزایش یابد.
با این حال، نیاز به تکنیکی برای ذخیره اطلاعات بین درخواستها و بازیابی آن در صورت لزوم وجود دارد.
این اطلاعات ( مقدار فعلی همه کنترلها و متغیرها ) Managing State نامیده میشود.
ASP.NET چهار نوع حالت را مدیریت می کند:
- View State
- Control State
- Session State
- Application State
View State
View State وضعیت صفحه و تمام کنترل های آن است.
این متد به طور خودکار در سراسر پست ها توسط چارچوب ASP.NET نگهداری می شود.
هنگامی که یک صفحه به مشتری ارسال می شود، تغییرات در ویژگی های صفحه و کنترل های آن تعیین می شود
و در مقدار یک فیلد ورودی مخفی به نام _VIEWSTATE ذخیره می شود.
هنگامی که صفحه دوباره ارسال شد، فیلد _VIEWSTATE با درخواست HTTP به سرور ارسال می شود.
با استفاده از یک آبچکت View State تعریف شده توسط کلاس StateBag که مجموعه ای از آیتم های View State را تعریف می کند، پیاده سازی می شود.
کلاس StateBag دارای ویژگی های زیر است:
Properties | Description |
Item(name) | The value of the view state item with the specified name. This is the default property of the StateBag class. |
Count | The number of items in the view state collection. |
Keys | Collection of keys for all the items in the collection. |
Values | Collection of values for all the items in the collection. |
کلاس StateBag متدهای زیر را نیز دارد:
Methods | Description |
Add(name, value) | Adds an item to the view state collection and existing item is updated. |
Clear | Removes all the items from the collection. |
Equals(Object) | Determines whether the specified object is equal to the current object. |
Finalize | Allows it to free resources and perform other cleanup operations. |
GetEnumerator | Returns an enumerator that iterates over all the key/value pairs of the StateItem objects stored in the StateBag object. |
GetType | Gets the type of the current instance. |
IsItemDirty | Checks a StateItem object stored in the StateBag object to evaluate whether it has been modified. |
Remove(name) | Removes the specified item. |
SetDirty | Sets the state of the StateBag object as well as the Dirty property of each of the StateItem objects contained by it. |
SetItemDirty | Sets the Dirty property for the specified StateItem object in the StateBag object. |
ToString | Returns a string representing the state bag object. |
در مثال زیر یک شمارنده را می سازیم که هر بار که صفحه به عقب ارسال می شود با کلیک کردن بر
روی دکمه ای در صفحه افزایش می یابد
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="statedemo._Default" %>
Untitled Page
کد بک اند برای مثال در اینجا نشان داده شده است:
public partial class _Default : System.Web.UI.Page
{
public int counter
{
get
{
if (ViewState["pcounter"] != null)
{
return ((int)ViewState["pcounter"]);
}
else
{
return 0;
}
}
set
{
ViewState["pcounter"] = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
lblCounter.Text = counter.ToString();
counter++;
}
}
Control State
Control State را نمی توان تغییر داد یا مستقیماً به آن دسترسی پیدا کرد یا غیرفعال کرد.
Session State
هنگامی که یک کاربر به یک وب سایت ساخته شده با ASP.NET متصل می شود، یک آبجکت Session State جدید ایجاد می شود.
هنگامی که Session State روشن است، برای هر درخواست جدید یک شیء Session State جدید ایجاد می شود.
این شیء Session State بخشی از متن می شود و از طریق صفحه در دسترس است.
Session State عموماً برای ذخیره داده های برنامه مانند موجودی، لیست تامین کنندگان، سوابق مشتری یا سبد خرید استفاده می شود.
همچنین می تواند اطلاعات مربوط به کاربر و انتخاب های او را نیز در خود نگهداری کند.
Session State از کلاس HttpSessionState ایجاد می شود که مجموعه ای از آیتم های Session State را تعریف می کند.
کلاس HttpSessionState دارای ویژگی های زیر است:
Properties | Description |
SessionID | آی دی سشن |
Item(name) | مجموعه آیتم های موجود در سشن |
Count | تعداد آیتم ها |
TimeOut | مقدار زمان مجاز بین درخواستها را قبل از پایان دادن به سشن توسط ارائهدهنده Session State دریافت و تنظیم میکند. |
آبجکت Session State یک جفت نام-مقدار برای ذخیره و بازیابی برخی اطلاعات از شیء Session State است.
برای همین می توانید از کد زیر استفاده کنید:
void StoreSessionInfo()
{
String fromuser = TextBox1.Text;
Session["fromuser"] = fromuser;
}
void RetrieveSessionInfo()
{
String fromuser = Session["fromuser"];
Label1.Text = fromuser;
}
کد بالا فقط رشتهها را در شی دیکشنری Session ذخیره میکند، با این حال، میتواند تمام انواع دادههای اولیه و آرایههای متشکل از انواع دادههای اولیه، و همچنین اشیاء DataSet، DataTable، HashTable و Image و همچنین هر کاربر را ذخیره کند.
کلاس تعریف شده ای که از شی ISerializable به ارث می برد.
Validators
کنترلهای Validators ASP.NET دادههای ورودی کاربر را تأیید میکنند تا اطمینان حاصل شود
که دادههای بیفایده، احراز هویت نشده یا به اشتباه ذخیره نمیشوند.
ASP.NET کنترل های اعتبارسنجی زیر را ارائه می دهد:
- RequiredField Validator
- RangeValidator
- Compare Validator
- RegularExpressionValidator
- Custom Validator
- ValidationSummary
کلاس BaseValidator
کلاسهای کنترل Validators از کلاس BaseValidator به ارث برده میشوند،
بنابراین ویژگیها و روشهای آن را نیز به ارث میبرند.
بنابراین، نگاهی به ویژگیها و روشهای این کلاس پایه، که برای همه کنترلهای Validators مشترک هستند، بیندازید :
Members | Description |
ControlToValidate | Indicates the input control to validate. |
Display | Indicates how the error message is shown. |
EnableClientScript | Indicates whether client side validation will take. |
Enabled | Enables or disables the validator. |
ErrorMessage | Indicates error string. |
Text | Error text to be shown if validation fails. |
IsValid | Indicates whether the value of the control is valid. |
SetFocusOnError | It indicates whether in case of an invalid control, the focus should switch to the related input control. |
ValidationGroup | The logical group of multiple validators, where this control belongs. |
Validate() | This method revalidates the control and updates the IsValid property. |
RequiredFieldValidator Control
کنترل RequiredFieldValidator تضمین می کند که فیلد مورد نیاز خالی نیست.
به طور کلی باعث می شود پر کردن فیلد ورودی textbox اجباری شود.
سینتکس کنترل به صورت زیر است:
RangeValidator Control
کنترل RangeValidator تأیید می کند که مقدار ورودی در یک محدوده از پیش تعیین شده قرار می گیرد.
دارای سه ویژگی خاص است:
Properties | Description |
Type | It defines the type of the data. The available values are: Currency, Date, Double, Integer, and String. |
MinimumValue | It specifies the minimum value of the range. |
MaximumValue | It specifies the maximum value of the range. |
CompareValidator Control
کنترل CompareValidator یک مقدار در یک کنترل را با یک مقدار ثابت یا یک مقدار در یک کنترل دیگر مقایسه می کند.
دارای خواص ویژه زیر است:
Properties | Description |
Type | It specifies the data type. |
ControlToCompare | It specifies the value of the input control to compare with. |
ValueToCompare | It specifies the constant value to compare with. |
Operator | It specifies the comparison operator, the available values are: Equal, NotEqual, GreaterThan, GreaterThanEqual, LessThan, LessThanEqual, and DataTypeCheck. |
RegularExpressionValidator
RegularExpressionValidator اجازه می دهد تا متن ورودی را با تطبیق با الگوی یک عبارت منظم اعتبار سنجی کنید.
عبارت منظم در ویژگی ValidationExpression تنظیم شده است.
جدول زیر ساختارهای نحوی رایج مورد استفاده برای عبارات منظم را نمایش میدهد :
Character Escapes | Description |
\b | Matches a backspace. |
\t | Matches a tab. |
\r | Matches a carriage return. |
\v | Matches a vertical tab. |
\f | Matches a form feed. |
\n | Matches a new line. |
\ | Escape character. |
جدای از تطابق یک کاراکتر، یک کلاس از کاراکترها را می توان مشخص کرد که می توان آنها را با هم تطبیق داد، به نام متاکاراکترها.
Metacharacters | Description |
. | Matches any character except \n. |
[abcd] | Matches any character in the set. |
[^abcd] | Excludes any character in the set. |
[2-7a-mA-M] | Matches any character specified in the range. |
\w | Matches any alphanumeric character and underscore. |
\W | Matches any non-word character. |
\s | Matches whitespace characters like, space, tab, new line etc. |
\S | Matches any non-whitespace character. |
\d | Matches any decimal character. |
\D | Matches any non-decimal character. |
همچنین برای تعیین تعداد دفعاتی که یک کاراکتر می تواند ظاهر شود، کمیت کننده ها را می توان اضافه کرد.
Quantifier | Description |
* | Zero or more matches. |
+ | One or more matches. |
? | Zero or one matches. |
{N} | N matches. |
{N,} | N or more matches. |
{N,M} | Between N and M matches. |
CustomValidator
کنترل CustomValidator اجازه می دهد تا روال های CustomValidator خاص برنامه را برای اعتبار سنجی سمت مشتری و سرور بنویسید.
Validator سمت مشتری از طریق ویژگی ClientValidationFunction انجام می شود.
Validator سمت سرویس گیرنده باید به یک زبان برنامه نویسی مانند جاوا اسکریپت یا VBScript نوشته شود که مرورگر بتواند آن را درک کند.
Validator سمت سرور باید از ServerValidate فراخوانی شود.
Validator سمت سرور باید به هر زبان دات نت مانند C# یا VB.Net نوشته شود.
نحو اصلی برای کنترل به شرح زیر است:
Database Access
ASP.NET امکان دسترسی و استفاده از منابع داده زیر را فراهم می کند:
پایگاه های داده (به عنوان مثال، Access، SQL Server، Oracle، MySQL)
- XML documents
- Business Objects
- Flat files
ASP.NET فرآیندهای پیچیده دسترسی به داده ها را پنهان می کند و سطح بسیار بالاتری از کلاس ها و اشیاء را فراهم می کند
که از طریق آنها به داده ها به راحتی دسترسی پیدا می شود.
این کلاس ها همه کدگذاری های پیچیده برای اتصال، بازیابی داده ها، پرس و جوی داده ها و دستکاری داده ها را پنهان می کنند.
بازیابی و نمایش داده ها
برای بازیابی و نمایش داده ها در ASP.NET به دو نوع کنترل داده نیاز است:
A data source control : اتصال به داده ها، انتخاب داده ها و کارهای دیگر مانند صفحه بندی و ذخیره داده ها و … را مدیریت می کند.
A data view control – داده ها را نمایش می دهد و امکان دستکاری داده ها را فراهم می کند.
در این بخش، از یک کنترل SqlDataSource برای دسترسی به داده ها و یک کنترل GridView برای نمایش و دستکاری داده ها در این فصل استفاده خواهیم کرد.
نام پایگاه داده ما ASPDotNetStepByStep.mdb است و از جدول داده DotNetReferences استفاده خواهیم کرد.
این جدول دارای ستون های زیر است :
ID, Title, AuthorFirstName, AuthorLastName, Topic, and Publisher.
مراحل عملی
یک وب سایت ایجاد کنید و یک SqlDataSourceControl در وب فرم اضافه کنید.
روی گزینه Configure Data Source کلیک کنید.
روی دکمه New Connection کلیک کنید تا با یک پایگاه داده کانکت شوید.
هنگامی که اتصال راه اندازی شد، می توانید آن را برای استفاده بیشتر ذخیره کنید.
در مرحله بعد، از شما خواسته می شود دستور select را پیکربندی کنید:
ستون ها را انتخاب کنید و برای تکمیل مراحل روی next کلیک کنید.
دکمه های WHERE، ORDER BY و Advanced را مشاهده کنید.
این دکمه ها به شما این امکان را می دهند که عبارت Where، order به clause را ارائه دهید و
به ترتیب دستورهای insert، update و delete SQL را مشخص کنید. به این ترتیب می توانید داده ها را دستکاری کنید.
یک کنترل GridView روی فرم اضافه کنید. سورس کد را انتخاب کنید و کنترل را با استفاده از گزینه AutoFormat فرمت کنید.
پس از این، کنترل GridView فرمت شده عناوین ستون ها را نمایش می دهد، و برنامه آماده اجرا است.
در نهایت برنامه را اجرا کنید.
کد فایل به صورت زیر است :
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dataaccess.aspx.cs"
Inherits="datacaching.WebForm1" %>
Untitled Page
Data Sources
یک Data Sources با کنترل های محدود به داده تعامل دارد و فرآیندهای پیچیده اتصال داده را پنهان می کند.
اینها ابزارهایی هستند که داده ها را برای کنترل های محدود داده ارائه می کنند و
از اجرای عملیاتی مانند درج، حذف، مرتب سازی و به روز رسانی پشتیبانی می کنند.
هر Data Sources یک wraps a particular data ، XML documents یا کلاسهای سفارشی را تنظیم و به موارد زیر کمک میکند:
- مدیریت اتصال
- انتخاب داده ها
- مدیریت presentation aspects مانند صفحه بندی، کش کردن و …
- دستکاری داده ها
Data Sources های زیادی در ASP.NET برای دسترسی به داده ها از سرور SQL،
از سرورهای ODBC یا OLE DB، از فایل های XML و از آبجکت ها موجود است.
بر اساس نوع داده، این کنترل ها را می توان به دو دسته تقسیم کرد:
- Hierarchical data source controls
- Table-based data source controls
Data Sources مورد استفاده برای داده های سلسله مراتبی عبارتند از:
XMLDataSource : امکان اتصال به فایل ها و رشته های XML با یا بدون اطلاعات schema را فراهم می کند.
SiteMapDataSource : به منبعی که اطلاعات نقشه سایت را ارائه می دهد، اتصال می دهد.
کنترل های منبع داده مورد استفاده برای داده های جدولی عبارتند از:
- SqlDataSource It
- OLEDB and ODBC.
- ObjectDataSource
- LinqdataSource
- AccessDataSource
Data Source Views
کلاس DataSourceView به عنوان کلاس پایه برای همه کلاسهای Data Source عمل میکند که قابلیتهای Data Source را تعریف میکنند.
جدول زیر ویژگی های کلاس DataSourceView را نشان می دهد:
Properties | Description |
CanDelete | Indicates whether deletion is allowed on the underlying data source. |
CanInsert | Indicates whether insertion is allowed on the underlying data source. |
CanPage | Indicates whether paging is allowed on the underlying data source. |
CanRetrieveTotalRowCount | Indicates whether total row count information is available. |
CanSort | Indicates whether the data could be sorted. |
CanUpdate | Indicates whether updates are allowed on the underlying data source. |
Events | Gets a list of event-handler delegates for the data source view. |
Name | Name of the view. |
جدول زیر متدهای کلاس DataSourceView را ارائه می دهد:
Methods | Description |
CanExecute | Determines whether the specified command can be executed. |
ExecuteCommand | Executes the specific command. |
ExecuteDelete | Performs a delete operation on the list of data that the DataSourceView object represents. |
ExecuteInsert | Performs an insert operation on the list of data that the DataSourceView object represents. |
ExecuteSelect | Gets a list of data from the underlying data storage. |
ExecuteUpdate | Performs an update operation on the list of data that the DataSourceView object represents. |
Delete | Performs a delete operation on the data associated with the view. |
Insert | Performs an insert operation on the data associated with the view. |
Select | Returns the queried data. |
Update | Performs an update operation on the data associated with the view. |
OnDataSourceViewChanged | Raises the DataSourceViewChanged event. |
RaiseUnsupportedCapabilitiesError | Called by the RaiseUnsupportedCapabilitiesError method to compare the capabilities requested for an ExecuteSelect operation against those that the view supports. |
The SqlDataSource Control
SqlDataSource یک اتصال به یک پایگاه داده رابطه ای مانند پایگاه داده SQL Server یا Oracle یا
داده های قابل دسترسی از طریق OLEDB یا Open Database Connectivity (ODBC) را نشان می دهد.
اتصال به داده ها از طریق دو ویژگی مهم ConnectionString و ProviderName انجام می شود.
قطعه کد زیر، نحو اصلی کنترل را ارائه می کند:
پیکربندی عملیات داده های مختلف بر روی داده های underlying به ویژگی های مختلف (گروه های ویژگی) data source دارد.
جدول زیر مجموعه ای از ویژگی های مربوط به کنترل SqlDataSource را ارائه می دهد که رابط برنامه نویسی کنترل را ارائه می دهد:
Property Group Description
DeleteCommand,
DeleteParameters,
DeleteCommandType Gets or sets the SQL statement, parameters, and type for deleting rows in the underlying data.
FilterExpression,
FilterParameters Gets or sets the data filtering string and parameters.
InsertCommand,
InsertParameters,
InsertCommandType Gets or sets the SQL statement, parameters, and type for inserting rows in the underlying database.
SelectCommand,
SelectParameters,
SelectCommandType Gets or sets the SQL statement, parameters, and type for retrieving rows from the underlying database.
SortParameterName Gets or sets the name of an input parameter that the command's stored procedure will use to sort data.
UpdateCommand,
UpdateParameters,
UpdateCommandType Gets or sets the SQL statement, parameters, and type for updating rows in the underlying data store.
قطعه کد زیر یک کنترل منبع داده را نشان می دهد که برای دستکاری داده ها فعال شده است:
.....
.....
The ObjectDataSource Control
ObjectDataSource کلاسهای تعریفشده توسط کاربر را قادر میسازد تا خروجی روشهای خود را به کنترلهای دادهبندی شده مرتبط کنند.
رابط برنامه نویسی این کلاس تقریباً مشابه کنترل SqlDataSource است.
در زیر دو جنبه مهم از اهداف تجاری الزام آور وجود دارد :
کلاس bindable باید یک سازنده پیشفرض داشته باشد، باید بدون حالت باشد و
دارای روشهایی باشد که بتوان آنها را برای انتخاب، به روزرسانی، درج و حذف معنایی نگاشت کرد.
شی باید یک مورد را در یک زمان به روز کند، عملیات دسته ای پشتیبانی نمی شود.
اجازه دهید مستقیماً به یک مثال برای کار با این کنترل برویم. کلاس دانشجو کلاسی است که با منبع داده شی مورد استفاده قرار می گیرد.
این کلاس دارای سه ویژگی است: شناسه دانشجویی، نام و شهر.
این یک سازنده پیش فرض و یک متد GetStudents برای بازیابی داده ها دارد.
public class Student
{
public int StudentID { get; set; }
public string Name { get; set; }
public string City { get; set; }
public Student()
{ }
public DataSet GetStudents()
{
DataSet ds = new DataSet();
DataTable dt = new DataTable("Students");
dt.Columns.Add("StudentID", typeof(System.Int32));
dt.Columns.Add("StudentName", typeof(System.String));
dt.Columns.Add("StudentCity", typeof(System.String));
dt.Rows.Add(new object[] { 1, "M. H. Kabir", "Calcutta" });
dt.Rows.Add(new object[] { 2, "Ayan J. Sarkar", "Calcutta" });
ds.Tables.Add(dt);
return ds;
}
}
ASP.NET به کاربران نیز اجازه می دهد تا کنترل ها را ایجاد کنند.
این کنترل های تعریف شده توسط کاربر به دو دسته تقسیم می شوند:
- User controls
- Custom controls
User Controls
User controls مانند صفحات کوچک ASP.NET یا وب فرمها عمل میکنند که میتوانند
توسط بسیاری از صفحات دیگر استفاده شوند.
اینها از کلاس System.Web.UI.UserControl مشتق شده اند. این کنترل ها دارای ویژگی های زیر هستند:
- پسوند .ascx دارند.
- ممکن است حاوی هیچ تگ،یاشد یا نباشند.
یک دستورالعمل کنترل به جای یک دستورالعمل صفحه دارند.
برای درک مفاهیم بالا ، اجازه دهید یک کنترل کاربر ساده ایجاد کنیم،
که به عنوان پاورقی برای صفحات وب کار می کند.
برای ایجاد و استفاده از کنترل کاربر، مراحل زیر را انجام دهید:یک برنامه وب جدید ایجاد کنید.
روی پوشه پروژه در Solution Explorer کلیک راست کرده و Add New Item را انتخاب کنید.
Web User Control را از کادر Add New Item انتخاب کنید و نام آن را footer.ascx بگذارید.
در ابتدا، footer.ascx فقط حاوی یک دستورالعمل کنترل است.
• <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="footer.ascx.cs"
• Inherits="customcontroldemo.footer" %>
کد زیر را به فایل اضافه کنید:
•
•
• Copyright ©2010 TutorialPoints Ltd.
•
•
•
• Location: Hyderabad, A.P
•
•
برای افزودن User Controls به صفحه وب خود، باید دستورالعمل Register و نمونه ای از User Controls را به صفحه اضافه کنید.
کد زیر فایل محتوا را نشان می دهد:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="customcontroldemo._Default" %>
<%@ Register Src="~/footer.ascx" TagName="footer" TagPrefix="Tfooter" %>
Untitled Page
هنگام اجرا، صفحه فوتر را نشان می دهد و این کنترل می تواند در تمام صفحات وب سایت شما استفاده شود.
Custom Controls
کنترل های سفارشی به عنوان مجموعه های فردی مستقر می شوند.
آنها در یک Dynamic Link Library (DLL) کامپایل شده و به عنوان هر کنترل دیگر سرور ASP.NET استفاده می شوند.
آنها می توانند به یکی از روش های زیر ایجاد شوند:
با استخراج یک کنترل سفارشی از یک کنترل موجود
با ایجاد یک کنترل سفارشی جدید که دو یا چند کنترل موجود را ترکیب می کند.
با استخراج از کلاس کنترل پایه
برای درک مفاهیم بالا ، اجازه دهید یک کنترل سفارشی ایجاد کنیم، که به سادگی یک پیام متنی در مرورگر ارائه می دهد.
برای ایجاد این کنترل، مراحل زیر را انجام دهید:
یک وب سایت جدید ایجاد کنید. روی solution در بالای درخت در Solution Explorer کلیک راست کنید.
در کادر New Project dialog box ، ASP.NET Server Control را از قالبهای پروژه انتخاب کنید.
مرحله بالا یک پروژه جدید اضافه می کند و یک کنترل سفارشی کامل به راه حل به نام ServerControl1 ایجاد می کند.
در این مثال، اجازه دهید نام پروژه را CustomControls بگذاریم.
برای استفاده از این کنترل، قبل از ثبت آن در یک صفحه، باید به عنوان مرجع به وب سایت اضافه شود.
برای افزودن یک مرجع به پروژه موجود، روی Project کلیک راست کرده و روی Add Reference کلیک کنید.
پروژه CustomControls را از تب Projects در کادر گفتگوی Add Reference انتخاب کنید.
Solution Explorer باید مرجع را نشان دهد.
برای استفاده از کنترل در یک صفحه، دستور Register را درست در زیر دستورالعمل @Page اضافه کنید:
<%@ Register Assembly="CustomControls" Namespace="CustomControls" TagPrefix="ccs" %>
علاوه بر این، می توانید از کنترل، مشابه هر کنترل دیگری استفاده کنید.
کار با کنترل های سفارشی
در مثال قبلی، مقدار خاصیت Text کنترل سفارشی تنظیم شد.
هنگامی که کنترل ایجاد شد، ASP.NET به طور پیش فرض این ویژگی را اضافه کرد.
کد زیر بک اند کنترل این را نشان می دهد.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CustomControls
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:ServerControl1 runat=server>{0}:ServerControl1 >")]
public class ServerControl1 : WebControl
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string Text
{
get
{
String s = (String)ViewState["Text"];
return ((s == null) ? "[" + this.ID + "]" : s);
}
set
{
ViewState["Text"] = value;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Text);
}
}
}
کد بالا به طور خودکار برای یک کنترل سفارشی تولید می شود.
رویدادها و متدها را می توان به کلاس کنترل سفارشی اضافه کرد.
Detect Bugs & Vulnerabilities (تشخیص خطاها)
اکثر برنامه ها داده محور هستند، با این حال بیشتر repositories داده ها پایگاه داده های رابطه ای هستند.
در طول سال ها، طراحان و توسعه دهندگان برنامه هایی را بر اساس آبجکت مدل طراحی کرده اند.
اشیاء مسئول اتصال به اجزای دسترسی به داده ، به نام لایه دسترسی به داده (DAL) هستند.
در اینجا باید به سه نکته توجه کنیم:
تمام داده های مورد نیاز در یک برنامه کاربردی در یک منبع ذخیره نمی شوند.
منبع می تواند یک پایگاه داده رابطه، فایل XML یا یک وب سرویس باشد.
دسترسی به شی در حافظه ساده تر و کم هزینه تر از دسترسی به داده ها از یک پایگاه داده یا فایل XML است.
داده های دسترسی مستقیم استفاده نمی شوند، اما باید مرتب شوند،گروه بندی شوند، تغییر داده شوند و …
از این رو، اگر ابزاری وجود داشته باشد که انواع دسترسی به داده ها را آسان کند و
امکان اتصال داده ها از چنین منابع داده متفاوت و انجام عملیات پردازش داده استاندارد را در چند خط کد فراهم کند، کمک بزرگی خواهد بود.
LINQ یا Query با زبان یکپارچه چنین ابزاری است. LINQ مجموعه ای از برنامه های افزودنی برای
Net Framework 3.5 و زبان های مدیریت شده آن است که query را به عنوان یک شی تنظیم می کند.
این یک syntax و یک مدل برنامه نویسی برای query از انواع مختلف داده ها با استفاده از یک زبان مشترک تعریف می کند.
عملگرهای رابطهای مانند Select، Project، Join، Group، Partition، Set و … در LINQ پیادهسازی میشوند
و کامپایلرهای C# و VB در چارچوب Net 3.5 ، که از کوئری LINQ پشتیبانی میکنند،
کار با دادههای پیکربندی شده را ممکن میسازد. بدون توسل به ADO.NET ذخیره کنید.
به عنوان مثال، جستجوی جدول مشتریان در پایگاه داده Northwind، با استفاده از کوئری LINQ در سی شارپ، کد زیر خواهد بود:
var data = from c in dataContext.Customers
where c.Country == “Spain”
select c;
جایی که :
کلمه کلیدی « from » به طور منطقی در محتویات مجموعه حلقه می زند.
عبارت با کلمه کلیدی “where” برای هر شیء در مجموعه ارزیابی می شود.
دستور “select” آبجکت evaluated را برای افزودن به لیست در حال بازگشت انتخاب می کند.
کلمه کلیدی “var” برای اعلان متغیر است. از آنجایی که نوع دقیق شیء برگشتی مشخص نیست، نشان می دهد که اطلاعات به صورت پویا استنباط خواهند شد.
کوئری LINQ را می توان برای هر کلاس حاوی داده ای که از IEnumerable<T> به ارث می برد اعمال کرد،
در اینجا T هر نوع داده ای است، برای مثال List<Book>.
اجازه دهید برای درک مفهوم به یک مثال نگاه کنیم. مثال از کلاس زیر استفاده می کند:
Books.cs
public class Books
{
public string ID {get; set;}
public string Title { get; set; }
public decimal Price { get; set; }
public DateTime DateOfRelease { get; set; }
public static List GetBooks()
{
List list = new List();
list.Add(new Books { ID = "001",
Title = "Programming in C#",
Price = 634.76m,
DateOfRelease = Convert.ToDateTime("2010-02-05") });
list.Add(new Books { ID = "002",
Title = "Learn Java in 30 days",
Price = 250.76m,
DateOfRelease = Convert.ToDateTime("2011-08-15") });
list.Add(new Books { ID = "003",
Title = "Programming in ASP.Net 4.0",
Price = 700.00m,
DateOfRelease = Convert.ToDateTime("2011-02-05") });
list.Add(new Books { ID = "004",
Title = "VB.Net Made Easy",
Price = 500.99m,
DateOfRelease = Convert.ToDateTime("2011-12-31") });
list.Add(new Books { ID = "005",
Title = "Programming in C",
Price = 314.76m,
DateOfRelease = Convert.ToDateTime("2010-02-05") });
list.Add(new Books { ID = "006",
Title = "Programming in C++",
Price = 456.76m,
DateOfRelease = Convert.ToDateTime("2010-02-05") });
list.Add(new Books { ID = "007",
Title = "Datebase Developement",
Price = 1000.76m,
DateOfRelease = Convert.ToDateTime("2010-02-05") });
return list;
}
}
صفحه وب با استفاده از این کلاس دارای یک کنترل لیبل ساده است که عنوان کتاب ها را نمایش می دهد.
رویداد Page_Load فهرستی از کتاب ها ایجاد می کند و عناوین را با استفاده از کوئری LINQ برمی گرداند:
public partial class simplequery : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List books = Books.GetBooks();
var booktitles = from b in books select b.Title;
foreach (var title in booktitles)
lblbooks.Text += String.Format("{0}
", title);
}
}
امنیت در asp
پیاده سازی امنیت در یک سایت دارای جنبه های زیر است:
احراز هویت: فرآیند اطمینان از هویت و اصالت کاربر است.
ASP.NET به چهار نوع احراز هویت اجازه می دهد:
- احراز هویت ویندوز
- احراز هویت فرم ها
- احراز هویت Passport
- احراز هویت سفارشی
Authorization (مجوز) : فرآیند تعریف و تخصیص نقش های خاص به کاربران خاص است.
Confidentiality (محرمانه بودن) : شامل رمزگذاری کانال بین مرورگر مشتری و وب سرور است.
Integrity (یکپارچگی) : شامل حفظ یکپارچگی داده ها می شود. به عنوان مثال، پیاده سازی امضای دیجیتال.
احراز هویت مبتنی بر فرم
احراز هویت مبتنی بر فرم شامل ویرایش فایل web.config و افزودن یک صفحه ورود به سیستم با کد احراز هویت مناسب است.
فایل web.config را می توان ویرایش کرد و کدهای زیر را روی آن نوشت:
...
...
صفحه login.aspx ذکر شده در قطعه کد بالا میتواند کد زیر را در پشت فایل با نامهای کاربری و رمزهای عبور برای احراز هویت در آن کدگذاری شده داشته باشد.
protected bool authenticate(String uname, String pass)
{
if(uname == "Tom")
{
if(pass == "tom123")
return true;
}
if(uname == "Dick")
{
if(pass == "dick123")
return true;
}
if(uname == "Harry")
{
if(pass == "har123")
return true;
}
return false;
}
public void OnLogin(Object src, EventArgs e)
{
if (authenticate(txtuser.Text, txtpwd.Text))
{
FormsAuthentication.RedirectFromLoginPage(txtuser.Text, chkrem.Checked);
}
else
{
Response.Write("Invalid user name or password");
}
}
توجه داشته باشید که کلاس FormsAuthentication مسئول فرآیند احراز هویت است.
با این حال، ویژوال استودیو به شما این امکان را می دهد که از طریق ابزار مدیریت وب سایت، ایجاد کاربر، احراز هویت و مجوز
را با سهولت بدون نوشتن هیچ کدی پیاده سازی کنید. این ابزار امکان ایجاد کاربران و نقش ها را فراهم می کند.
جدای از این، ASP.NET با مجموعه کنترل های ورود به سیستم آماده ارائه می شود که دارای کنترل هایی است که همه کارها را برای شما انجام می دهد.
پیاده سازی امنیت مبتنی بر فرم
برای تنظیم احراز هویت مبتنی بر فرم ها، به موارد زیر نیاز دارید:
- پایگاه داده ای از کاربران برای پشتیبانی از فرآیند احراز هویت
- وب سایتی که از پایگاه داده استفاده می کند
- حساب های کاربری
- نقش ها
- محدودیت کاربران و فعالیت های گروهی
- یک صفحه پیش فرض برای نمایش وضعیت ورود کاربران و سایر اطلاعات
- یک صفحه ورود، که به کاربران اجازه می دهد وارد شوند، رمز عبور را بازیابی کنند یا رمز عبور را تغییر دهند
برای ایجاد کاربران، مراحل زیر را انجام دهید:
مرحله (1): Website -> ASP.NET Configuration را برای باز کردن Web Application Administration Tool انتخاب کنید.
مرحله (2): روی تب Security کلیک کنید.
مرحله (3) : با انتخاب دکمه رادیویی « From the Internet » نوع احراز هویت را برای « Forms based authentication » انتخاب کنید.
مرحله (4): برای ایجاد چند کاربر، روی پیوند ” Create Users ” کلیک کنید.
اگر قبلاً نقشهایی ایجاد کردهاید، میتوانید نقشهایی را درست در این مرحله به کاربر اختصاص دهید.
مرحله (5): یک وب سایت ایجاد کنید و صفحات زیر را اضافه کنید:
- Welcome.aspx
- Login.aspx
- CreateAccount.aspx
- PasswordRecovery.aspx
- ChangePassword.aspx
مرحله (6): یک کنترل LoginStatus را در Welcome.aspx از بخش ورود به جعبه ابزار قرار دهید.
دارای دو قالب است: LoggedIn و LoggedOut.
در قالب LoggedOut لینک ورود و در قالب LoggedIn لینک خروج روی کنترل وجود دارد.
می توانید ویژگی های متن ورود و خروج کنترل را از پنجره Properties تغییر دهید.
مرحله (7): یک کنترل LoginView را از جعبه ابزار زیر کنترل LoginStatus قرار دهید.
در اینجا می توانید متون و سایر کنترل ها (هایپرلینک ها، دکمه ها و ..) را قرار دهید که بر اساس ورود یا عدم ورود کاربر نمایش داده می شوند.
این کنترل دارای دو قالب نمایش است: قالب ناشناس و قالب LoggedIn. هر دو نما را انتخاب کنید و
متنی برای کاربران بنویسید تا برای هر الگو نمایش داده شود. متن باید در قسمتی که قرمز رنگ است قرار گیرد.
مرحله (8) : کاربران برنامه توسط توسعه دهنده ایجاد می شوند. ممکن است بخواهید به یک بازدیدکننده اجازه دهید
یک حساب کاربری ایجاد کند.
برای این کار، یک لینک زیر کنترل LoginView اضافه کنید، که باید به صفحه CreateAccount.aspx پیوند بخورد.
مرحله (9): یک کنترل CreateUserWizard را در صفحه ایجاد حساب قرار دهید.
ویژگی ContinueDestinationPageUrl این کنترل را روی Welcome.aspx قرار دهید.
مرحله (10): صفحه ورود را ایجاد کنید. یک کنترل ورود به صفحه را قرار دهید.
کنترل LoginStatus به طور خودکار به Login.aspx پیوند می خورد.
برای تغییر این پیش فرض، تغییرات زیر را در فایل web.config انجام دهید.
به عنوان مثال، اگر می خواهید صفحه ورود خود را به عنوان signup.aspx نامگذاری کنید،
خطوط زیر را به بخش <authentication> web.config اضافه کنید:
مرحله (11): کاربران اغلب رمزهای عبور را فراموش می کنند.
کنترل PasswordRecovery به کاربر کمک می کند تا به حساب کاربری دسترسی پیدا کند.
کنترل ورود را انتخاب کنید. تگ هوشمند آن را باز کنید و روی « Convert to Template » کلیک کنید.
UI کنترل را سفارشی کنید تا یک کنترل هایپرلینک زیر دکمه ورود قرار دهید، که باید به PassWordRecovery.aspx پیوند بخورد.
مرحله (12): یک کنترل بازیابی رمز عبور را در صفحه بازیابی رمز عبور قرار دهید.
این کنترل به یک سرور ایمیل برای ارسال رمزهای عبور به کاربران نیاز دارد.
مرحله (13): پیوندی به صفحه ChangePassword.aspx در قالب LoggedIn کنترل LoginView در Welcome.aspx ایجاد کنید.
مرحله (14): یک کنترل ChangePassword را در صفحه تغییر رمز عبور قرار دهید.
این کنترل نیز دارای دو نمای است.
اکنون برنامه را اجرا کنید و عملیات امنیتی مختلف را مشاهده کنید.
برای ایجاد نقش ها، به Web Application Administration Tools برگردید و روی تب Security کلیک کنید.
روی ” Create Roles ” کلیک کنید و چند نقش برای برنامه ایجاد کنید.
روی پیوند ” Manage Users ” کلیک کنید و نقش هایی را به کاربران اختصاص دهید.
Data Caching
قبل از پرداختن به مبحث کش در asp باید بدانید مفهوم کش به صورت کلی چیست .
کش کردن یک تکنیک ذخیره سازی داده ها/اطلاعات پرکاربرد در حافظه است،
به طوری که، زمانی که دفعه بعد به همان داده/اطلاعات نیاز است، به جای بارگزاری مجدد، بتواند مستقیماً از حافظه بازیابی شود.
حافظه پنهان برای افزایش عملکرد در ASP.NET بسیار مهم است، زیرا صفحات و کنترل ها به صورت پویا در اینجا تولید می شوند.
این امر به ویژه برای تراکنش های مرتبط با داده مهم است، زیرا از نظر زمان پاسخ گران هستند.
ذخیرهسازی مکانهایی که دادههای پرکاربرد را در رسانههایی با دسترسی سریع مانند حافظه دسترسی تصادفی رایانه انجام میدهند.
زمان اجرا ASP.NET شامل یک نقشه کلید-مقدار از اشیاء CLR به نام کش است.
این مربوط به برنامه است و از طریق HttpContext و System.Web.UI.Page در دسترس است.
از برخی جهات، کش کردن شبیه به ذخیره اشیاء حالت است.
با این حال، ذخیره اطلاعات در اشیاء حالت قطعی است، یعنی میتوانید روی دادههایی که در آنجا ذخیره میشوند حساب کنید،
و ذخیره دادهها غیر قطعی است.
داده ها در موارد زیر در دسترس نخواهد بود:
- اگر عمر آن به پایان برسد،
- اگر برنامه حافظه خود را آزاد کند،
- اگر کش به دلایلی انجام نشود.
شما می توانید با استفاده از یک نمایه ساز به آیتم های موجود در حافظه پنهان دسترسی داشته باشید و ممکن است طول عمر اشیاء موجود در حافظه پنهان را کنترل کنید و پیوندهایی بین اشیای کش و منابع فیزیکی آنها تنظیم کنید.
کش در asp
ASP.NET انواع مختلف کش را ارائه می دهد که عبارتند از :
Output Caching : یک کپی از صفحات HTML نهایی ارائه شده یا بخشی از صفحات ارسال شده به مشتری را ذخیره می کند.
هنگامی که مشتری بعدی برای این صفحه درخواست می کند، به جای ایجاد مجدد صفحه، یک نسخه کش شده از صفحه ارسال می شود
و در نتیجه در زمان صرفه جویی می شود.
Data Caching : ذخیره داده به معنای ذخیره داده ها از منبع داده است.
تا زمانی که کش منقضی نشده باشد، درخواست داده از کش انجام می شود.
هنگامی که حافظه نهان منقضی می شود، داده های تازه توسط منبع داده به دست می آید و کش دوباره پر می شود.
Object Caching : کش کردن اشیا در حافظه پنهان اشیاء موجود در یک صفحه، مانند کنترلهای محدود به داده، ذخیره میشود.
داده های کش در حافظه سرور ذخیره می شود.
Class Caching : صفحات وب یا سرویس های وب در یک کلاس صفحه در اسمبلی، زمانی که برای اولین بار اجرا می شوند، کامپایل می شوند.
سپس اسمبلی در سرور ذخیره می شود. دفعه بعد که درخواستی برای صفحه یا سرویس ارائه می شود،
اسمبلی کش ارجاع داده می شود. هنگامی که سورس کد تغییر می کند، CLR اسمبلی را دوباره کامپایل می کند.
Configuration Caching : اطلاعات پیکربندی گسترده برنامه در یک فایل پیکربندی ذخیره می شود.
کش پیکربندی اطلاعات پیکربندی را در حافظه سرور ذخیره می کند.
وب سرویس
وب سرویس یک عملکرد مبتنی بر وب است که با استفاده از پروتکل های وب برای استفاده
توسط برنامه های کاربردی وب قابل دسترسی است. سه جنبه توسعه وب سرویس وجود دارد:
- ایجاد وب سرویس
- ایجاد یک پروکسی
- مصرف وب سرویس
ایجاد وب سرویس
وب سرویس یک برنامه کاربردی وب است که اساساً یک کلاس متشکل از روش هایی است
که می تواند توسط سایر برنامه ها استفاده شود.
همچنین از معماری پشتیبان کد مانند صفحات وب ASP.NET پیروی می کند، اگرچه رابط کاربری ندارد.
برای درک مفهوم، اجازه دهید یک وب سرویس برای ارائه اطلاعات قیمت سهام ایجاد کنیم.
مشتریان می توانند در مورد نام و قیمت سهام بر اساس نماد سهام استعلام کنند.
برای ساده نگه داشتن این مثال، مقادیر در یک آرایه دو بعدی کدگذاری می شوند. این وب سرویس سه روش دارد:
- یک روش پیشفرض HelloWorld
- یک روش GetName
- یک روش GetPrice
مراحل زیر را برای ایجاد وب سرویس انجام دهید:
مرحله (1): File -> New -> Web Site را در Visual Studio انتخاب کنید و سپس ASP.NET Web Service را انتخاب کنید.
مرحله (2) : یک فایل وب سرویس به نام Service.asmx و کد بک اند آن Service.cs در پوشه App_Code پروژه ایجاد می شود.
مرحله (3): نام فایل ها را به StockService.asmx و StockService.cs تغییر دهید.
مرحله (4): فایل .asmx به سادگی یک دستورالعمل WebService روی آن دارد :
<%@ WebService Language="C#" CodeBehind="~/App_Code/StockService.cs" Class="StockService" %>
مرحله (5) : فایل StockService.cs را باز کنید، کد تولید شده در آن سرویس اولیه Hello World است.
کد پیشفرض وب سرویس بک اند به شکل زیر است:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
namespace StockService
{
//
// Summary description for Service1
//
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
// To allow this Web Service to be called from script,
// using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
}
مرحله (6): کد بک اند را تغییر دهید تا آرایه دو بعدی رشته ها را برای نماد سهام، نام و قیمت و دو روش وب برای دریافت اطلاعات سهام اضافه کنید.
using System;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script,
// using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class StockService : System.Web.Services.WebService
{
public StockService () {
//Uncomment the following if using designed components
//InitializeComponent();
}
string[,] stocks =
{
{"RELIND", "Reliance Industries", "1060.15"},
{"ICICI", "ICICI Bank", "911.55"},
{"JSW", "JSW Steel", "1201.25"},
{"WIPRO", "Wipro Limited", "1194.65"},
{"SATYAM", "Satyam Computers", "91.10"}
};
[WebMethod]
public string HelloWorld() {
return "Hello World";
}
[WebMethod]
public double GetPrice(string symbol)
{
//it takes the symbol as parameter and returns price
for (int i = 0; i < stocks.GetLength(0); i++)
{
if (String.Compare(symbol, stocks[i, 0], true) == 0)
return Convert.ToDouble(stocks[i, 2]);
}
return 0;
}
[WebMethod]
public string GetName(string symbol)
{
// It takes the symbol as parameter and
// returns name of the stock
for (int i = 0; i < stocks.GetLength(0); i++)
{
if (String.Compare(symbol, stocks[i, 0], true) == 0)
return stocks[i, 1];
}
return "Stock Not Found";
}
}
مرحله (7) : اجرای برنامه وب سرویس یک صفحه تست وب سرویس را ارائه می دهد که امکان آزمایش روش های سرویس را فراهم می کند.
مرحله (8): روی نام یک روش کلیک کنید و بررسی کنید که آیا به درستی اجرا می شود یا خیر.
مرحله (9): برای آزمایش روش GetName، یکی از نمادهای سهام را ارائه دهید که کدگذاری سختی دارند، نام سهام را برمی گرداند.
مصرف وب سرویس
برای استفاده از وب سرویس، یک وب سایت تحت همان راه حل ایجاد کنید.
این را می توان با کلیک راست روی نام Solution در Solution Explorer انجام داد.
صفحه وب که سرویس وب را فراخوانی می کند باید دارای یک کنترل برچسب برای نمایش نتایج برگشتی و دو دکمه کنترل یکی برای ارسال مجدد و دیگری برای تماس با سرویس باشد.
فایل محتوای وب اپلیکیشن به شرح زیر است:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="wsclient._Default" %>
Untitled Page
کد بک اند برنامه تحت وب به شرح زیر است:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
//this is the proxy
using localhost;
namespace wsclient
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
lblmessage.Text = "First Loading Time: " + DateTime.Now.ToLongTimeString
}
else
{
lblmessage.Text = "PostBack at: " + DateTime.Now.ToLongTimeString();
}
}
protected void btnservice_Click(object sender, EventArgs e)
{
StockService proxy = new StockService();
lblmessage.Text = String.Format("Current SATYAM Price:{0}",
proxy.GetPrice("SATYAM").ToString());
}
}
}
ساخت پروکسی
یک پروکسی پایه ای برای کدهای وب سرویس است.
قبل از استفاده از وب سرویس، باید یک پروکسی ایجاد شود.
پروکسی با برنامه مشتری ثبت شده است. سپس برنامه مشتری با استفاده از روش لوکال، با وب سرویس تماس می گیرد.
پروکسی تماس ها را می گیرد، آن را در قالب مناسب بسته بندی می کند و به عنوان یک درخواست SOAP به سرور ارسال می کند.
( SOAP مخفف عبارت Simple Object Access Protocol است. این پروتکل برای تبادل داده های وب سرویس استفاده می شود.)
هنگامی که سرور بسته SOAP را به مشتری برمی گرداند، پروکسی همه چیز را رمزگشایی می کند و آن را به برنامه مشتری ارائه می دهد.
قبل از تماس با وب سرویس با استفاده از btnservice_Click، یک مرجع وب باید به برنامه اضافه شود.
این یک کلاس پراکسی به صورت شفاف ایجاد می کند که توسط رویداد btnservice_Click استفاده می شود.
protected void btnservice_Click(object sender, EventArgs e)
{
StockService proxy = new StockService();
lblmessage.Text = String.Format("Current SATYAM Price: {0}",
proxy.GetPrice("SATYAM").ToString());
}
برای ایجاد پروکسی مراحل زیر را انجام دهید:
مرحله (1): روی ورودی برنامه وب در Solution Explorer کلیک راست کرده و روی « Add Web Reference » کلیک کنید.
مرحله (2): “Web Services in this solution” را انتخاب کنید. مرجع StockService را برمی گرداند.
مرحله (3) : با کلیک بر روی سرویس، صفحه وب آزمایشی باز می شود.
به طور پیش فرض پروکسی ایجاد شده “localhost” نام دارد، می توانید نام آن را تغییر دهید.
برای افزودن پروکسی به برنامه مشتری، روی « Add Reference » کلیک کنید.
با افزودن پروکسی در کد بک اند :
;using localhost
مهرسا امینی
برنامه نویس ، انیماتور ، سئوکار
در زندگی رویاهات را دنبال کن