بخشی از مقاله

مقدمه:
AJAX ِيک نوع برنامه نوِيسِي است که در سال 2005 توسط گوگل به طور عمومِي اِيجاد شد.باAJAX مِي توانِيد Web Application هاِي بهتر , سرِيعتر و بسِيارکاربر پسند اِيجاد کنِيد.
Ajax راهی برای تقسیم کردن صفحات وب به قسمتهای قابل Update است به طوریکه Update کردن بخشی از صفحه کل صفحه را Update نکند.در واقع Ajax پاسخی به مشکلات Web

Application ها در چند سال گذشته است. کافی است یکبار یک سایت طراحی کنید تا بفهمید که Postback های اضافی و بی مورد و load شدن های وحشتناک آن هم به خاطر تغییر، مثلا تاریخ در یک تقویم چه دردسری را برای طراح و کاربر ایجاد میکند.وقتی صحبت از انداختن بار CPU از سرور به کامپیوتر کاربر میشود, یعنی از java script استفاده شده است. در واقع سیستم استفاده از script که به دلیل ناامنی به کناری گذاشته شده بود با تلفیق جدید دوباره احیا شد.AJAX مبتنِي برجاوا اسکرِيپت و HTTP Request است.

معرفِي AJAX :


آجاکس ِيک زبان برنامه نوِيسِي جدِيد نِيست بلکه ِيک تکنِيک جهت اِيجاد Web application هاِي بهتر و سرِيعتر و بسِيار تعاملِي است.
با آجاکس , جاوا اسکرِيپت مِي تواند مستقِيما با سرور ارتباط برقرار کند, و از شِي جاوا اسکرِيپتِي XMLHttpRequest استفاده کند. با اِين شِي , جاوا اسکرِيپت مِي تواند داده را با ِيک Web server , بدون لود مجدد صفحه , مبادله کند.
آجاکس از انتقال ناهمزمان داده ها(درخواستهاِي HTTP) در بين browser و web server استفاده مِي کندو اجازه مِي دهد صفحات وب به جاِي درخواست کل صفحه, اطلاعات کمِي را از سرور درخواست کنند.
تکنِيک آجاکس, application هاِي اِينترنت را کوچکتر و سرِيعترو بسِيار کاربرپسند مِي کند.
آجاکس ِيک تکنولوژِي browser وابسته به نرم افزار web server است و مبنِي بر استانداردهاِي وب است.در ادامه لیستی از این استانداردها را می بینید:
• JavaScript
• XML
• HTML
• CSS
استانداردهاِي وبِي که آجاکس مبنِي بر آنها است , به خوبِي تعرِيف شده اند و توسط browser هاِي زِيادِي پشتِيبانِي مِي شوند. Application هاِي آجاکس و browser و platform بهم وابسته اند.


Web application ها مزاِياِي بیشتری نسبت به application هاِي دِيگر دارند. آنها مِي توانندبه داده ي بيشترِي دستِ يابندونصب و پشتِيبانِي آنها بسِيار آسان است وجهت توسعه راحترند.به هر حال , application هاِي اِينترنتِي همانند desktop application هاِي سنتِي همِيشه غنِي و کاربرپسند نِيستند.با آجاکس , internet application ها مِي توانند غنِي تر و کاربرپسندتر ایجاد شوند.

Httprequest آجاکس (ajax httprequest)
در کد گذارِي سنتِي جاوا اسکرِيپت, اگر اطلاعاتِي از يک دِيتابِيس یا ی

ک فاِيل در سرور مِي خواستِيدویاجهت ارسال اطلاعات کاربر به یک سرور، مِي بایست يک فرم HTML درست مِي کردِيدو داده ها را به سرور مِي فرستادِيدِPOST)) يا از آن مِي گرفتِيد(GET). کاربر جهت درِيافت ِيا ارسال اطلاعات باِيد روِي دکمه ي “Submit” کلِيک مِي کرد, منتظر پاسخگوِيِي سرور مِي ماند, سپس یک صفحه ي جدِيد با نتِيجه لود مِي شد.سرور در هر بار که کاربر ورودِي را ارائه کند,ِيک صفحه ِي جدِيد برمِي گرداند, وب application هاِي سنتِي خِيلِي کند اجرا و کمتر کاربرپسند هستند .
با آجاکس , جاوا اسکرِيپت در مِيان شِي JavaScriptXMlHttpRequestمستقِيما با سرور در ارتباط است .
با ِيک درخواست HTTP , صفحه ِي وب مِي تواند ِيک درخواست به سرور درست کند, و پاسخِي از ِيک وب سرور,بدون لود مجدد صفحه , درِيافت کند. کاربر در همان صفحه مِي ماند, و به درخواستهاِي اسکرِيپتِي صفحات توجهِي ندارد.



مثالِي از AJAX
براِي درک چگونگِي کار آجاکس , بِياِيِيد ِيک Ajax application کوچک اِيجاد کنِيم.
ابتدا، ِيک فرم HTML ساده با دو متن اِيجاد مِي کنِيم : username وtime . فِيلد username با کاربر پر مِيشود و فِيلد time با استفاده از آجاکس پر مِي شود.
فاِيل HTML را testajax.htm بنامِيد . قطعه کد لازم در زِير نشان داده شده است. توجه کنِيد که اِين فرم HTML دکمه ِي submit ندارد.
<html>
<body>
<form name=myForm>
Name: <input type=text name=username />
Time: <input type=text name=time />
</form>
</body>
</html>

بخش بعدِي در مورد keystone هاِي آجاکس توضِيحِي مِي دهد.
پشتِيبانِي Browser از آجاکس


Keystone هاِي آجاکس , شِي XMLHttpRequest است. Browserهاِي مخــتلف , ازمــــتدهاِي مختلفِي جهت اِيجاد شِي XMLHttpRequest استفاده مِي کنند.
Internet Explorer از ِيک شِي ActiveX استفــــاده مِي کند, در حالِي که browser هاِي دِيـــگر از شِي توکار JavaScript فراخوانده شده در XMLHttpRequest استفاده مِي کنند.
براِي اِيجــاد اِين شِــي , و تبادل با browser هاِي مختلف , از عبارت “try …catch” استفاده مِي کنِــيم. بـــِياِيِيد فاِيلtestAjax.htm را با با جاوا اسکرِيپتِي که شِي XMLHttpRequest را اِيجاد مِيکند, به روز کنِيم:
<html>
<body>
<scripttype="text/javascript">
function ajaxFunction()
{
var xmlHttp;
try
{
//Firefox,Opera8.0+,Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
//InternetExplorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}


}
}
}
</script>
<form name=myForm>
Name: <input type=text name=username />
Time: <input type=text name=time />


</form>
</body>
</html>


دراِين مثال ابتدا ِيک متغِير xmlHttp جهت نگه داشتن ِيک شِي XMLHttpRequest اِيجاد مِي کنِيم.
سپس سعِي مِي کند با دستور () xmlHttp=new XMLHttpRequestِيک شِي اِيجاد کند.اِين براِي browser هاِي Fierfox,Opera و Safari است. اگر آن ممکن نبود, براِي Internet Explore 6.0 سعِي مِي کند با دستور xmlHttp=new ActiveXObject(“Msxml2.XMLHTTP”) ِيک شِي اِيجادکند، و اگر آنهم ممکن نبود، براِي Internet Explorer 5.5 سعِي مِي کند با دستور
xmlHttp=new ActiveXObject(“Microsoft.XMlHTTP”) ِيک شِي اِيجاد کند.
اگر هِيچ کدام از اِين سه متد کار نکند , کاربر ِيک browser بسِيار قدِيمِي دارد و ِيک اخطار مبنِي براِينکه browser اش آجاکس را پشتِيبانِي نمِي کند, مِي بِيند.

توجه: کد وِيژه ِي browser بالا طولانِي ونسبتا پِيچِيده است. اما شما مِي توانِيد هر زمان که خواستِيد ِيک شِي XMLHttpRequest اِيجاد کنِيد , آن را کپِي کنِيد.

شِي XMLHttpRequest
با استفاده از شِي XMLHttpRequest ,برنامه نویس مِي تواند ِيک صفحه داراِي داده از سرور را بعد از لود صفحه , به روز کند.آجاکس به طور عمومِي در سال 2005 توسط Google sugestایجاد شد.
Google Suggest از شِي XMLHttpRequest براِي اِيجاد ِيک رابط وب پوِيا , استفاده مِي کند.زمانِي که مطلبِي را جهت جستجو در google تاِيپ مِيکنِيد، جاوا اسکرِيپت،متن شما را به ِيک سرور ارسال مِي کند و سرور لِيست پِيشنهادهاِيش را بر مِي گرداند.
مرورگرهاِي 5.0IE Safari 1.2, , 8 opera , Mozila 1.0/Firefox و Netscape 7 , شِي XMLHttpRequest را پشتِيباتِي مِي کند.
قبل از فرستادن داده ها به سرور , مِي باِيست سه خصوصِيت مهم شِي XMLHttpRequest را بدانِيم.
خصوصِيت onreadystatechange


بعد از ِيک تقاضا به سرور , نِيازمند تابعِي هستِيم که بتواند داده اي که توسط سرور برگردانده مِي شود را درِيافت کند.خصوصِيت onreadystatechange , تابعِي را که پاسخ ِيک سرور را پردازش مِي کند, ذخِيره مِي کند. کدِي که در زِير نوشته شده است ِيک تابع خالِي تعرِيف مِي کند و خصوصِيت onreadystatechange را در ِيک زمان تنظِيم مِي کند:
xmlHttp.onreadystatechange=function()
{
// We are going to write some code here


}

خصوصِيت readyState
خصوصِيت readyState وضعِيتهاِي پاسخ سرور را نگه مِي دارد. هر بار که readyState تغِيِير مِي کند, تابع onreadystatechange اجرا خواهد شد.
در زِير مقدار هاِي مجاز خصوصِيت readystate آورده شده است:
Description State
درخواست آغاز (initialize) نشده است(Not initialized) 0
درخواست برقرار شده است(Open) 1
درخواست فرستاده شد(Sent). 2
درخواست در حال پردازش است(Recived). 3
درخواست کامل است(Loaded). 4

براِي آزمودن اِينکه آِيا پاسخ کامل است(به اِين معنا که مِي توانِيم داده هاِيمان را بگِيرِيم)، باِید ِيک عبارت if به تابع onreadychange بِيفزاِيِيم.
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
// Get the data from the server's response
}
}

خصوصِيت responseText
داده ِي برگشتِي از سرور با خصوصِيتresponseText قابل بازِيابِي است.
در کد زِير , ما مقدار فِيلد “time” را مساوِي با responseText تنظِيم کرده اِيم:
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.myForm.time.value=xmlHttp.responseText;
}
}

بخش بعدِي نشان مِي دهد که چگونه بعضِي از داده ها را ازسرور درخواست کنِيم.

ارسال ِيک درخواست به سرور
جهت بدرقه ِي ِيک درخواست به سرور, از متدهاِي open() و send() استفاده مِي کنِيم.
متد open() سه آرگومان مِي پذِيرد. آرگومان اول براِي تعِيِين متد(GET ِيا POST) جهت ارسال درخواست استفاده شود. آرگومان دوم URL اسکرِيپت سمت سرور را مشخص مِي کند.آرگومان سوم مشخص مِي کند که درخواست باِيد به طور ناهمزمان کنترل(handled) شود ِيا نه.متد send() , درخواست را به سرور همراهِي و بدرقه مِي کند .با فرض اِينکه فاِيل HTML وASP در ِيک مسِير هستند, کد به صورت زِير است:
xmlHttp.open("GET","time.asp",true);
xmlHttp.send(null);

اکنون باِيد در مورد زمان اجرا ِي تابع آجاکس تصمِيم گِيرِي کنِيم. براِي مثال هنگامِي که کاربر در فِيلد username متنِي را تاِيپ مِي کند , اجازه دهِيم تابع در"پشت صحنه " اجرا شود.مانند زِير:
<form name=myForm>
Name: <input type=text
onkeyup="ajaxFunction();" name=username />
Time: <input type=text name=time />
</form>

فاِيل testAjax به روز شده با قطعه کد با لا به صورت زِير است:
<html>
<body>
<script type=text/javascript>
function ajaxFunction()
{
var xmlHttp;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{


xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}
}


}
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.myForm.time.value=xmlHttp.responseText;
}
}
xmlHttp.open("GET","time.asp",true);
xmlHttp.send(null);
}
</script>
<form name=myForm>
Name: <input type=text
onkeyup="ajaxFunction();" name=username />
Time: <input type=text name=time />
</form>
</body>
</html>

در بخش بعدِي AJAX application را با اسکرِيپت"time.asp" کامل مِي کنِيم.

اسکرِيپت سمت سرور ASP
اکنون قصد دارِيم اسکرِيپتِي اِيجاد کنِيم که زمان جارِي سِيستم را نماِيش دهد.
خصوصِيت responceText (که در بخشهاِي قبلِي توضِيح داده شد)، داده ِي بازگشتِي از سرور را ذخِيره مِي کند . در اِينجا مِي خواهِيم زمان جارِي را برگردانِيم.کد نوشته شده در time.asp به صورت زِير است:
<%
response.expires=-1
response.write(time)
%>


توجه: با استفاده خصوصِيت Expire مدت زمان cache ِيک صفحه قبل از منقضِي شدن آن درِيک browser را تنظِيم مِي کند.اگر کاربر صفحه ِي مشابهِي را قبل از زمان انقضا بر گرداند، نسخه ِي cache شده نشان داده مِي شود. براِي اِينکه صفحه هرگز cache نشود، باِيد Response.Expire=-1 باشد.

اجراِي AJAX Application
با تاِيپ متنِي در textbox مربوط بهName وسپس کلِيک در داخل text box مربوط به time نتِيجه را خواهِيد دِيد. Text box مربوط به time بدون لود دوباره ِي صفحه، زمان سرور را از فاِيل time.asp مِي گِيرد.

مثالهاِي دِيگر آجاکس
دِيدِيم که براِي اِيجاد چندِين application تعاملِي مِي توان از آجاکس ا استفاده نمود .در مثالهاِي آجاکسِي که در زِير آمده است به توضِيح چگونگِي ارتباط ِيک صفحه ِي وب با ِيک وب سرور online مِي پردازِيم.

مثال 2: AJAX Database


از آجاکس جهت اِيجاد ارتباطات تعاملِي و محاوره اِي با ِيک دِيتابِيس نِيزمِي توان استفاده نمود.در مثال زِيرقصد دارِيم نشان دهِيم چگونه ِيک صفحه ِي web اطلاعات را ازِيک دِيتابِيس با استفاده از تکنولوژِي آجاکس واکشِي (fetch)مِي کند.در اِين مثال با کلِيک روِي dropdown list اطلاعات مشترِي لِيست مِي شود.

توضِيح مثال:
مثال بالا شامل ِيک فرم HTML ساده وِيک لِينک به ِيک فاِيل JavaScript است :
<html>


<head>
<script src=selectcustomer.js></script>
</head>
<body>
<form>
Select a Customer:
<select name=customers onchange="showCustomer(this.value)">
<option value="ALFKI">Alfreds Futterkiste
<option value="NORTS ">North/South
<option value="WOLZA">Wolski Zajazd
</select>
</form>
<p>
<div id="txtHint"><b>Customer info will be listed here.</b></div>
</p>
</body>
</html>

همان طور که مِي بِينِيد اِين ِيک کد ساده HTML است که ِيک drop down list با نام "customers" دارد.
پاراگراف پاِيِين فرم ِيک تگ div با نام "txtHint" دارد.در اِين مثال،از divهمچون مکانِي براِي نگهدارِي اطلاعات بازِيابِي شده ازِيک web server استفاده مِي شود.
هنگامِي که کاربر داده اِي را انتخاب مِي کند،تابعِي بانام "showCustomer()" فراخوانِي مِي شود.روِيداد”onchange” ،راه اندازِي براِي اجراِي اِين تابع است.به عبارت دِيگر : هر بار که کاربر مقدار باکس drop down list را تغِيِير مِي دهد, تابع “showCustomer” فرا خوانِي مِي شود.

JavaScript آجاکس
در زِير کد جاوا اسکرِيپت نشان داده شده است.اِين کد در فاِيل "selectcustomer.js" ذخِيره شده است.
var xmlHttp

function showCustomer(str)


{
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
{
alert ("Your browser does not support AJAX!");
return;
}


var url="getcustomer.asp";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}

function stateChanged()
{
if (xmlHttp.readyState==4)
{
document.getElementById("txtHint").innerHTML=xmlHttp.responseText;
}
}

function GetXmlHttpObject()
{
var xmlHttp=null;


try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}


}
return xmlHttp;
}

AJAX Server Page
صفحه ِي سرورِي که توسط جاوا اسکرِيپت فراخوانِي شده است، ِيک فاِيل ASP به نام "getcustomer.aspx" است. اِين کد به زبان C# نوشته شده است و نتِيجه را مانند ِيک جدول HTML بر مِي گرداند.
<%
Response.Expires = -1;
System.Data.SqlClient.SqlConnection myConnection = new System.Data.SqlClient.SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=E:\\Class C#\\northwind.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
myConnection.Open();
System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand(SELECT * FROM CUSTOMERS WHERE CUSTOMERID="+ "'" + Convert.ToString(Request.QueryString.Get("q")) + "'", myConnection);

System.Data.SqlClient.SqlDataReader drEmp =
command.ExecuteReader();

drEmp.Read();
Response.Write("<table>");

 

v
Response.Write("<tr><td>" );
Response.Write(Convert.ToString(drEmp.GetName(i)));
Response.Write("</td><td>");
Response.Write(Convert.ToString(drEmp.GetValue(i)));
Response.Write( "</td></tr>");
}

Response.Write("</table>");

 

myConnection.Close();
%>


مثال 4: AJAX XML
آجاکس مِي تواند ارتباط تعاملِي و محاوره اِي با ِيک فاِيل XML داشته باشد.در مثال زِيرقصد دارِيم نشان دهِيم چگونه ِيک صفحه ِي web مِي تواند اطلاعات را از ِيک فاِيل XML با استفاده از تکنولوژِي آجاکس واکشِي (fetch)کند.

توضِيح مثال:
مثال بالا شامل ِيک فرم HTML وِيک لِينک به ِيک فاِيل JavaScript است.
<html>
<head>
<script src=selectcd.js></script>
</head>
<body>
<form>
Select a CD:
<select name=cds onchange="showCD(this.value)">
<option value="Bob Dylan">Bob Dylan</option>
<option value="Bonnie Tyler">Bonnie Tyler</option>
<option value="Dolly Parton">Dolly Parton</option>
</select>
</form>
<p>
<div id="txtHint"><b>CD info will be listed here.</b></div>
</p>
</body>
</html>

همانطور که مِي بِينِيد اِين ِيک فرم HTML با ِيک drop dpwn list به نام"cds" است . پاراگراف پاِيِين فرم شامل ِيک تگ div به نام "txtHint" است. در اِين مثال, از divهمچون مکانِي براِي نگهدارِي اطلاعات بازِيابِي شده از ِيک web server استفاده مِي شود.
وقتِي کاربر داده اِي را انتخاب مِي کند, تابعِي با نام "showCD" فرا خوانِي مِي شود. روِيداد "onchange" راه اندازِي براِي اجراِي اِين تابع اس

ت.به عبارت دِيگر: هر بار که که کاربر مقدار باکس drop down list را تغِيِير دهد، تابع showCD فراخوانِي مِي شود.

JavaScript آجاکس
در زِير کد جاوا اسکرِيپت نشان داده شده است . اِين کد در فاِيل "select.js" ذخِيره شده است:
var xmlHttp
function showCD(str)
{
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
{
alert ("Your browser does not support AJAX!");
return;
}
var url="getcd.asp";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
function stateChanged()
{
if (xmlHttp.readyState==4)
{
document.getElementById("txtHint").innerHTML=xmlHttp.responseText;
}
}


function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}

AJAX Server Page
صفحه ِي سرورِي که توسط چاوا اسکرِيپت فراخوانِي مِيشود, ِيک فاِيل ASP به نام "getcd.aspx" است. بدون استفاده از تکنولوژِي آجاکس, اِين فاِيل ِيک فاِيل XML را اجرا مِي کرد .اما با بکارگِيرِي اِين تکنولوژِي به جاِي اجراِي فاِيل XML ، يک query را اجرا مِي کند ونتِيجه را به صورت HTML بر مِي گرداند.

اِين کد به زبان C# نوشته شده است:
<%@ Import Namespace="System.Xml"%>
<%@I

mport Namespace="System.Xml.XPath"%>
<%
Response.Expires = -1;
string q = Request.QueryString.Get("q");

string xmlPath = "E:\\TEST\\Example4W3schools\\cd_catalog.xml";
XmlDocument doc = new XmlDocument();
doc.Load(xmlPath);
XmlNodeList nodeList =
doc.SelectNodes("/CATALOG/CD[@Artist='"+q+"']");

foreach (XmlNode X in nodeList)
{
foreach (XmlNode Y in X.ChildNodes)
{
Response.Write("<b>" + Y.Name + " : </b>");
Response.Write(Y.InnerText);
Response.Write("<br />");
}
}

%>


مثال 4: AJAX ResponseXML
همانطور که responseText , ِيک پاسخHTTP رااز نوعstring برمِي گرداند, responseXML پاسخ را از نوع XML بر مِي گرداند .
خصوصِيت ResponseXML ِيک شِي XML document برمِي گرداند.قصد دارِيم در اِين مثال نشان دهِيم که چگونه ِيک web page ،اطلاعات را از ِيک دِيتابِيس با استفاده از تکنولوژِي آجاکس واکشِي مِي کند.اِين بار داده ِي انتخاب شده از دِيتابِيس به ِيک XMl document تبدِيل مِي شود و مِي توانِيم از DOM براِي استخراج مقدار جهت نشان دادن استفاده کنِيم.
مثال4:

توضِيح مثال:
مثال بالا شامل ِيک فرم HTML است که چندِين عنصر(تگ) <span> جهت نگهدارِي داده و ِيک لِيِيک جاوا اسکرِيپت است.
<html>
<head>
<script s

rc="selectcustomer_xml.js"></script>
</head>
<body>
<form action="">
Select a Customer:
<select name=customer

s onchange="showCustomer(this.value)">
<option value="ALFKI">Alfreds Futterkiste</option>
<option value="NORTS ">North/South</option>
<option value="WOLZA">Wolski Zajazd</option>
</select>
</form>
<b><span id="companyname"></span></b><br />
<span id="contactname"></span><br />
<span id="address"></span>
<span id="city"></span><br/>
<span id="country"></span>
</body>
</html>

اِين فرم HTML ِيک Drop Down Box به نام "customers" دارد.
هنگامِي که کاربر ِيک مشترِي را از drop down boxانتخاب مِي کند, تابعِي به نام "showCustomer()" اجرا مِي شود.روِيداد"onchange" باعث راه اندازِي اجراِي اِين تابع مِي شود. به عبارت دِيگر: هر بار که کاربر مقدار داخلdrop down box را تغِيِير دهد, اِين تابع فراخوانِي مِي شود.

آجاکسJavaScript
در زِير کد جاوا اسکرِيپت نشان داده شده است .اِين کد در فاِيل "selectcustomer_xml.js"ذخِيره شده است.
var xmlHttp
function showCustomer(str)
{
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
{
alert ("Your browser does not support AJAX!");
return;
}


var url="getcustomer_xml.asp";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}


function stateChanged()
{
if (xmlHttp.readyState==4)
{
var xmlDoc=xmlHttp.responseXML.documentElement;
document.getElementById("companyname").innerHTML=
xmlDoc.getElementsByTagName("compname")[0].childNodes[0].nodeValue;
document.getElementById("contactname").innerHTML=
xmlDoc.getElementsByTagName("contname")[0].childNodes[0].nodeValue;
document.getElementById("address").innerHTML=

 


xmlDoc.getElementsByTagName("address")[0].childNodes[0].nodeValue;
document.getElementById("city").innerHTML=
xmlDoc.getElementsByTagName("city")[0].childNodes[0].nodeValue;
document.getElementById("country").innerHTML=
xmlDoc.getElementsByTagName("country")[0].childNodes[0].nodeValue;
}
}

function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}

توابع showCustomer() و GetXmlHttpObject() درست مانند توابع در مثالهاِي قبلِي است. تابع statechange() که قبلا توضِيح داده شده است، اِين بار نتاِيج را مانند، ِيک XML document (با responseXML) بر مِي گردانِيم ،واز Dom براِي استخراج مقدارِي که مِي خواهِيم نشان دهِيم, استفاده مِي کنِيم.

AJAX Server Page
صفحه ِي سرورِي که توسط جاوا اسکرِيپ

ت فراخوانِي شد , ِيک فاِيل ASP با نام"getcustomer_xml.aspx" است. کد زِير به زبان C# نوشته شده است.
اِين کد به جاِي اجراِي ِيک دِيتابِيس، ِيک SQL queryرا اجرا مِي کندو نتِيجه را مانند ِيک XML documentبر مِي گرداند.
<%@Import Namespace="System.IO" %>
<%@ Import Namespace="System.Xml" %>
<%@ I

mport Namespace="System.Xml.XPath" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<%
Response.Expires=-1;
Response.ContentType="text/xml";

SqlConnection myConnection =
new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=E:\\Class C#\\ northwind.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");

myConnection.Open();
SqlCommand command = new SqlCommand("SELECT * CUSTOMERS WHERE CUSTOMERID =" + "'" + Convert.ToString(Request.QueryString.Get("q")) + "'", myConnection);
SqlDataReader datareader = command.ExecuteReader();

datareader.Read();

Response.Write("<company");
for (int i = 0; i < datareader.FieldCount; i++)
{

switch (i)
{
case (0):
Response.Write("<compname>" + Convert.ToString(datareader.GetValue(0)) + "</compname>");
break;

case (1):
Response.Write("<contname>" + Convert.ToString(datareader.GetValue(1)) + "</contname>");
break;
case (2):


Response.Write("<address>" + Convert.ToString(datareader.GetValue(2)) + "</address>");
break;
case (3):
Response.Write("<city>" + Convert.ToString(datareader.GetValue(3)) + "</city>");
break;
case (4):
Response.Write("<country>" + Convert.ToString(datareader.GetValue(4)) + "</country>");
break;
}
}
Response.Write("</company>");
%>

به خط دوم در کد ASP بالا (response.contenttype=”text/xml

” )توجه کنِيد. خصوصِيت ContentType نوع متد HTTP را براِي شِي response تنظِيم مِي کند.مقدار پِيش فرض براِي اِين پراپرتِي "text/html"است. اما ما مِي خواهِيم مقدارش اِين بار XML باشد.
سپس ِيک داده ر انتخاب مِي کنِيم ، وِيک XML document با داده مِي سازِيم.
Ajax با تلفیق جاوا اسکریپت ، XML و ASP.NET یک سری کنترل های موجود در ASP.NET را بسط داده و بخشی از کار آن کنترل را با استفاده از جاوا اسکریپت در سیستم کاربر انجام میدهد.

مقایسه ی معماری Asp.net AJAX Extensions و Asp.net 2
معماری Asp.net AJAX Extensions :
1- کنترلهای server 2- اتصال کننده ی سرویسهای کاربردی 3- ارتباطات ناهمزمان

معماری Asp.net 2 :
1- Page Framework و کنترلهای سرور 2- سرویسهای کاربردی

Server Controls :
کنترلهای سرور را به دو دسته تقسیم می شوند:
1- Script Managent : که شامل کنترلهای ScriptManagerو ScriptManagerProxy می شود.
2- Partial-Page Rendering(تفسیر قسمتی از صفحه) :که شامل کنترلهای UpdatePanel و UpdateProgressوTimer می شود.
حال به توضیح کامل هر کدام از این کنترلها می پردازیم:
1- ScriptManager :
1- نقطه ی شروعی برای صفحات Asp.net AJAX است.
2- فایلهای JavaScript رادر Client دانلود می کند.
3- مارا قادر می سازد تا برای تعبیر و به روز رسانی قسمتی از صفحه از کنترل UpdatePanel استفاده کنیم.
4- دسترسی به سرویس های وب را از طریق پروکسی های سمت Client فراهم می سازد.
5- مدیریت زمان انجام Callback وهچنین مدیریت خطاها را بر عهده دارد.
6- متدهای ثبتی برای Scripts فراهم می کند.
7- حیطه وموضع Asp.net Ajax را پشتیبانی وحمایت می کند.
نکته: هر صفحه فقط وفقط یک نمونه از ScriptManager نیاز دارد.
شمای ScriptManager:
<asp:ScriptManager ID="ScriptManager1" Runat="server"
EnablePartialRendering="true|false"
EnablePageMethods="true|false"
AsyncPostBackTimeout="seconds"
AsyncPostBackErrorMessage="message"
AllowCustomErrorsRedirect="true|false"
OnAsyncPostBackError="handler"
EnableScriptGlobalization="true|false"
EnableScriptLocalization="true|false"
ScriptMode="Auto|Inherit|Debug|Release"


ScriptPath="path">
<Scripts>
<!-- Declare script references here -->
</Scripts>
<Services>
<!-- Declare Web service references here -->
</Services>
</asp:ScriptManager>


Service References - 1 :
<asp:ScriptManager ID="ScriptManager1" Runat="server">
<Services>
<asp:ServiceReference Path="ZipCodeService.asmx" />
</Services>
</asp:ScriptManager>
2- ScriptManagerProxy :
"Proxy" برای کنترلهای ScriptManager در master pages اعلان می شود.همچنین اجازه می دهد content pages (صفحات content) اسکریپت و مرجع های سرویس را بشناسند ودر آنها ظاهر شوند.
<asp:ScriptManagerProxy ID="ScriptManagerProxy1" Runat="server">
<Scripts>
<!-- Declare additional script references here -->


</Scripts>
<Services>
<!-- Declare additional service references here -->
</Services>
</asp:ScriptManagerProxy>

3 _ Update Panel :


1- از Trigger های تعریف شده پشتیبانی می کند: به طور پیش فرض ، postback تمام کنترلها در یک UpdateControl به callback های غیر همگام تبدیل می شوند.trigger ها حیطه ودامنه ی postback->callback را منقبض یا منبسط می کنند.
2- در تمام حالات به درستی کار می کند.

شمای UpdatePanel:
<asp:ScriptManager ID="ScriptManager1" Runat="server"
EnablePartialRendering="true" /> …
<asp:UpdatePanel ID="UpdatePanel1" Runat="server"
UpdateMode="Always|Conditional"
ChildrenAsTriggers="true|false">
<Triggers>
<!-- Define triggers (if any) here -->
</Triggers>
<ContentTemplate>
<!-- Define content here -->
</ContentTemplate>
</asp:UpdatePanel>

راه اندازها( (Triggers :
*راه انداز غیر همگام postback (AsyncPostBackTrigger):
1- تبدیل postback ها به callback های ناهمزمان.2- هنگامی که کنترلها بیرون UpdatePanel هستند و post back و رویدادهای اتفاق می افتد,از triggerبرای به روز رسانی استفاده می شود . 3-اگر ChildrenAsTriggers="false" , می تواند در کنترلهای داخل UpdatePanel که callback بیشتری نسبت به postback دارند, استفاده شود.
*راه انداز PostBack ((PostbackTrigger
:1- اجازه ی postback به کنترلهای داخل Updatepanel می دهد .2- به طور نمونه اجازه postback به برخی کنترلها وقتی ChildrenAsTrigger="true" باشد, میدهد.
مثالی از Trigger :
<asp:UpdatePanel ID="UpdatePanel1" Runat="server"
UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" />


<asp:AsyncPostBackTrigger ControlID="TreeView1"
EventName="TreeNodeExpanded" />
<asp:AsyncPostBackTrigger ControlID="TreeView1"
EventName="TreeNodeCollapsed" />
<asp:PostBackTrigger ControlID="Button2" />


</Triggers>
<ContentTemplate>
...
</ContentTemplate>
</asp:UpdatePanel>
4-Timer :
آمیختن و ترکیب کنترلهای UpdatePanel و Timer باعث پیاده سازی به روز رسانی دوره ای می شود.
رویدادهای کنترل Timer مانند Triggerها استفاده می شوند:
<asp:Timer ID="Timer1" Runat="server" Interval="5000"
OnTick="OnTimerTick" />
...
<asp:UpdatePanel UpdateMode="Conditional" ...>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" />
</Triggers> ...
</asp:UpdatePanel>
5-UpdateProgress:
این کنترل بهمراه کنترلUpdatePanel استفاده می شودو وظایفش به شرح زیر است:
1-مشخص کننده ی این است که یک Update غیر همگام درجریان است.
2-متوقف کردن یک Update غیر همگام که در جریان است.
وقتی عمل Update شروع می شود یا پس از وقفه ای UpdateProgress, به طور خودکارنمایش داده می شود.
شمای UpdateProgress :
<asp:UpdateProgress ID="UpdateProgress1" Runat="server"
DisplayAfter="milliseconds"
DynamicLayout="true|false"
AssociatedUpdatePanelID="UpdatePanelID">
<ProgressTemplate>
<!-- Declare UpdateProgress UI here -->
</ProgressTemplate>
</asp:UpdateProgress>
مثالی از UpdateProgress:

 


<asp:UpdateProgress DisplayAfter="500" ...>
<ProgressTemplate>
<asp:Image ID="ProgressImage" Runat="server"
ImageUrl="~/Images/SpinningClock.gif" />
</ProgressTemplate>


</asp:UpdateProgress>
توقف عمل Update:
<asp:UpdateProgress DisplayAfter="500" ...>
<ProgressTemplate>
<b>Working...</b>
<asp:Button ID="CancelButton" Runat="server" Text="Cancel"
OnClientClick="cancelUpdate(); return false" />
</ProgressTemplate>
</asp:UpdateProgress>

<script type=text/javascript>
function cancelUpdate()
{
var obj = Sys.WebForms.PageRequestManager.getInstance();
if (obj.get_isInAsyncPostBack())
obj.abortPostBack();
}
</script>


بخش د وم :وب سرویس های ASP.NET AJAX :
مقدمه
معمولا بیشتر استفاد ه هایی که ممکن است از اینترنت داشته باشید ،ارسال و دریافت ایمیل و یا گردش کردن در وب است .این دو کاربرد معمولا بیشترین دلیلی است که افراد برای آن به اینترنت متصل میشوند. اما با رشد اینترنت ،نحوه استفاده افراد از اینترنت نیز در حال تغییر کردن است .
با رشد اینترنت برنامه هایی که برای انجام کارهای خود به اتصال به اینترنت نیاز دارند نیز در حال افزایش است .بیشتر برنامه های امروزی برای این که بتوانند داده های را به سرور خود بفرستند یا اطلاعات جدید را از سرور دریافت کنند نیاز دارند که به اینترنت متصل باشند.همین مورد موجب شده است که وب سرویس ها به یکی از بزرگترین تحولات اخیر در زمینه اینترنت تبدیل شوند.حتی میتوانیم بگوییم به همان اندازه که وب و صفحات وب در موت اخیر رشد داشته اند ، وب سرویس ها نیز رشد خواهند کرد و فراگیر خواهند شد .اما خب ،ممکن است سوال کنید که چرا وب سرویس ها تا این اندازه از اهمیت برخوردارند . ؟


همان طور که میدانید صفحات وب یکی از بهترین راه ها برای به اشتراک گذاشتن اطلاعات است .ما مشکلی که صفحات وب دارند و یا به عبارت بهتر میتوان گفت محدودیتی که این صفحات دارند این است که فقط انسان ها میتوانند از آن استفاده کنند !صفحات وب باید حتما بوسیله انسان ها فراخوانده شوند و اطلاعات درون آن نیز فقط میتواند بوسیله ذهن انسان درک شود . اما وب سرویس ها از ابتدا برای خوانده شدن و تفسیر شدن بوسیله برنامه های کامپیوتری ایجاد شده اند و نمیتوانند به وسیله ی انسان ها مورد استفاده ق

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

ل است که پیش بینی میکنند وب سرویس ها بزرگترین تحول اینترنتی در مدت اخیر خواهد بود . با استفاده از وب سرویس ها نه تنها شرکتهایی که میخواهند در نرم افزارهای خود یکپارچگی ایجاد کنند راههای بسیار ساده تر و ارزان تری را دراختیار خواهند داشت ،بلکه نرم افزار های موجود در شرکتهای تجاری کوچک نیز میتوانند به سادگی با یگدیگر رابطه داشته باشند .
برای اطلاعات بیشتر به این آدرس مراجعه نمایید :
http://msdn.microsoft.com/webservices
وب سرویس ها واحد هایی هستند که برای سایر برنامه ها داده هایی فراهم میکنند .وب سرویس ها نسل دیگری از برنامه نویسی تحت وب محسوب میشوند.تمام برنامه هاتحت پروتکل های استانداردموجود مانند HTTP ،XML،SOAP میتوانند به وب سرویس ها دسترسی داشته باشند .وب سرویس های ASP.NET ساده ترین راه را برای پیاده سازی آن ارائه داده اند.VS.NET به صورت خودکار قسمت های مختلف یک برنامه را مانند (web service discovery language)WSDL ، web service discovery (DISCO) و غیره را تولید میکند.دات نیم فریم ورک ابزاری را نیز برای تولید یک کلاس پروکسی جهت دسترسی به وب سرویس های طرف کلاینت فراهم کرده است .
وب سرویس ها برمبنای دریافت و تولید پیغام ها بنیانگذاری شده اند.مصرف کنندگان یک وب سرویس میتوانندتحت هر سیستم عاملی و با هر زبانی نوشته شوند.
در دنیای امروز برنامه های تجاری از مرز اینترانت و شبکه های داخلی فراتر رفته اند.این مورد نیاز به نوعی برنامه نویسی دارد که بر روی پلتفرم های مختلف و همچنین با زبان های برنامه نویسی مختلف قابل اجرا و دسترسی باشد .بحث انتقال پذیری یک برنامه بر روی پلتفرم های مختلف تا بحال بسیار مشکل و پرهزینه بوده است .بدین منظور در معماری ویندوز 2000 ب

حث وب سرویس ها برای حل این مشکل انتقال پذیری در نظر گرفته شده است.
وب سرویس ها همانند یک برنامه معمولی نوشته میشوندو میتوان آنها را با سرویس های یک ویندوزNT مقایسه کرد .آنها در پس زمینه اجرا شده و منتظر کلاینت ها می مانند تا به آنها وصل شوند.بنابراین یک وب سرویس همواره مشغول گوش دادن به رفت و آمدها ا

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

ASP.NET AJAX , وب متدهای ASMX را به عنوان آخرین نقطه و مرحله برای callback های ناهمزمان پشتیبانی می کند.زیرا:
1- در نوشتن کارآمد است(Soap,XML).2- در سرور کارآمد است(بدون زمان حیاط و وجود صفحه )
خصوصیات ScriptService درسرور نشان می دهد که وب سرویس قابل صدا زدن از طرف اسکریپت Client است. JavaScript proxy، Clientرا قادر به فراخوانی متدهای وب سرورمی کند.
اسکریپت قابل فراخوانی Web Service :

[System.Web.Script.Services.ScriptService]
public class ZipCodeService : System.Web.Services.WebService
{
[System.Web.Services.WebMethod]
public string[] GetCityAndStated (string zip)
{
...
}

نمایش یک Service Reference :



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


داده های اولیه داده های پایه ای استاندارد مانندstring وint غیره.
نوع های enum نو ع خای شمارشی مانندpublic enum color{redd=1 , blue=2}
کلاس ها و ساختارها کلاس ها و ساختارهایی با اجزای پایلیک
آرایه ای از کلاس آرایه ای از کلاس ها و ساختار ها
DataSet نوع های داده ایDataSet مربوط به ADO.NET


آرایه ای از DataSet مشخص است .
و غیره

چه نو ع داده های را می توان به یک وب سرویس پاس داد ؟
هنگام استفاده از پروتکل SOAP هر دو نوع داد های by-value وby-refrence یعنی(out/in) را میتوان استفاده کرد .پارامترهای by-refrence این خاصیت را دارند که میتوانند مقدار دو جهته بفرستند : به سرور و کلاینت. هنگام استفاده از پارامترهای ورودی با استفاده از پروتکلHTTP تنها نوع های داده ای محدودی پشتیبانی میشوندو باید تنها پارامترها از نوع by-value باشد .نوع پارامترهای ساپورت شده برای پروتکل HTTP در جدول زیر لیست شده اند:

جدول 2:نوع های داده ای مورد قبول برای استفاده با پروتکل HTTP :
نوع توضیح
داده های اولیه (محدود شده ) اغلب داده های پایه ای استاندارد مانندstring وint غیره.
نوع enum نوع های شمارشی

WSDL :
چگونه یک کلاینت می تواند حدس بزند که چه نوع توابع و پارامترها و موارد دیگری توسط یک وب سرویس ساپورت میشود ؟برای حل این مشکل تمام وب سرویس ها به صورت خودکار یک فایل XML را با فرمت SDL( service deciption language)تولید میکنند . این مورد به سادگی از طریق هر مرورگری با اضافه کردن یک "؟ SDL " به آدرس وب آن قابل مشاهده است .برای مثال :
http://myhost//services/myservice.asmx?sdl
توضیحات پشتیبانی شده توسط myservice را با فرمت نمایش SDL میدهد .
نحوه ی عملکرد وب سرویس ها :
اول از همه باید بگوییم که اساس وب سرویس ها به طور کلی روی استاندارهای آزاد است و به هیچ پلتفرم یا شرکت خاصی تعلق ندارد . یکی از جذابیت ها و دلایل موفقیت وب سرویس ها نیز در این مورد است که تفاوتی نمیکند که شما وب سرویس خود را روی چه پلت فرمی ارائه کنید ،ویندوز ، مکینتاش ،لینوکس ،سولاریس ،یونیکس،.....در هر حالت همه افراد میتوانند به سرور شما متصل شده و از وب سرویسی که ارائه می دهید استفاده کنند . این مورد دقیقا مشابه عملکرد سایت های وب است .در سایت های وب نیز تفاوتی ندارد که سروری که روی این سایت قرار گرفته و یا پلت فرمی که بوسیله آن نوشته شده است چیست و یا چگونه کار میکند .در هر صورت شما میتوانید به سادگی به ان متصل شده و از اطلاعات آن استفاده کنید .
دومین نکته ای که باید بدانید این است که وب سرویسی که در NET استفاده شده و به کار گرفته میشود تماما بر اساس مدل برنامه نویسی است که اغلب برنامه نویسان به استفاده از آن علاقه زیادی دارند :برنامه نویسی شی گرا .اگر شما نیز در اغلب برنامه های خود از اشیا استفاده میکنید در NET نیز به سادگی میتوانید وب سرویس ها را مورد استفاده قرار دهید .
اصلی که برای ایجاد یک وب سرویس مورد استفاده قرار میگیرد به این صورت است که

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

د کپی میشد )
-قسمتی از یک نرم افزار در همان کامپیوتر که میخواست از آن کلاس استفاده کند ،یک نمونه از این کلاس را ایجاد میکرد (یک "شی" ایجاد میکرد ).
-آن قسمت از نرم افزار که این شی را ایجاد کرده بود ،متد مورد نظر خود را از این کلاس فراخوانی میکرد .
- آن متد از شی ،کارهای خاصی را انجام میداد و مقداری را به عنوان نتیجه بر میگرداند .
- آن قسمت از نرم افزار که متدی را فراخوانی کرده بود ،نتیجه را دریافت کرده و از آن استفاده میکرد .

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

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

SOAP :
وب سرویس ها در حقیقت وب سایت هایی برای استفاده بوسیله نرم افزار ها هستند .بنابراین از همان تکنولوژی استفاده میکنند که باعث شده است سایتهای وب تا این حد عمومی شوند . وب سرویس ها نیز مانند وب از استاندارد HTTP استفاده میکنند که توسط همه ی سرورها ی وب به کا رگرفته شده است .
هنگامی که با "ایجاد سایتهایی برای انسان ها " سرو کار داریم ،معمولا کلاینت (م

رورگر) و سرور فایل های مختلفی را با یکدیگر معادله میکنند :فایل های متنی حاوی کد HTML,DHTML,JavaScript, و ...که ظاهر و متنهای موجود در صفحه را شامل میشوند ،فایل های تصویر و یا صدا با فرمت JPEG,GIF و یا ... که در قسمت های مختلف صفحه مورد استفاده قرار میگیرند و غیره .
اما زمانی که بخواهید برای نرم افزارها و برنامه های کامپیوتری سایتی را ایجاد کنید ،فقط با یک نوع فایل در ارتباط هستید .این فایل ها به نام فایل های SOAP معروف هستند .
نکته: SOAP در اصل سرنام کلمات Simple Object Access Protocl است ،اما استاندارد کنونی که در W3Cوجود دارد این اصطلاح را حذف کرده است .
هنگامی که یک برنامه بخواهد از یک وب سرویس تقاضای در یافت اطلاعاتی را بکند ،برای مثال بخواهد موجودی یک کالا در انبار را بداند ،یا بخواهد وضعیت کنونی یک سفارش را دریافت کند ،و یا از کامپیوتر سرور بخواهد تا کار خاصی را مثل یک تبدیل واحد برای او انجام دهد ،برنامه یک فایل درخواست با قالب SOAP ایجاد میکند . سپس این فایل با استفاده از HTTP و از طریق اینترنت به وب سروری که وب سرویس در آن قرار دارد فرستاده میشود .این فایل حاوی تمام اطلاعاتی است که وب سرویس نیاز دارد تا بداند چه کاری از او خواسته شده است . با توجه به این که وب سرویس ها مانند روش کلاس / روش معمولی کار میکنند ،این فایل SOAP معمولا حاوی نام متدی است که باید اجرا شود و نیز پارامترهایی که این متد به عنوان ورودی باید دریافت کند .
در سمت سرور ،این تقاضا به وسیله وب سرویس دریافت شده و بعد از این که درخواست کاربر از آن استخراج شد ،متد مورد نظر فراخوانی میشود . بعد از این که متد مورد نظر اجرا شده و نتیجه آماده شد ،وب سرویس یک فایل SOAP ایجاد کرده و نتیجه درخواست برنامه را در آن قرار میدهد و به سمت کامپیوتر درخواست کننده ارسال میکند . همانند فایلی که حاو ی تقاضا بود ،این فایل نیز که نتیجه را نگهدار ی میکند با استفاده از HTTP و به وسیله اینترنت به برنامه اول فرستاده میشود .
اسناد و فایل های SOAP با استفاده از XML ایجاد میشوند .
با توجه به این که استفاده از وب سرویس ها به پلت فرم خاصی وابسته نیست و هر نرم افزاری که در هر پلت فرمی طراحی شده باشد میتواند از هر وب سرویس که به هر نحوی ایجاد شده باشد استفاده کند . برنامه نویسان معمولا برای انتخاب یک پلت فرم به این نکته دقت میکنند که در هر پلت فرم چگونه میتوان فایلهای SOAP مربوط به استفاده از یک وب سرویس را ایجاد کرد و یا از فایل های حاوی نتیجه استفاده کرد و یا این نکته را در نظر میگیرند که د رهر پلت فرم چه ابزار

هایی برای طراحی وب سرویس مورد نظرشان وجود دارد .NET ،در هر دو زمینه تا حد ممکن سادگی و قدرت را برای طراحی و یا استفاده از یک وب سرویس فراهم کرده است . با استفاده از NET ،میتوان بدون این که درگیر فایل های SOAP شد از وب سرویس ها استفاده کرد و آن

ها را در برنامه به کار برد .


نحوه فراخوانی یک web service از ECMAScript (java script) :
برای اینکه برنامه شما قادر باشد ASP.NET AJAX Web Service را با استفاده از client script فراخوانی کند ، لایه Calling Web Services from Client Script in ASP.NET AJAX بصورت خودکار کلاس های JavaScript proxy را ایجاد می کند. یک کلاس proxy به ازای هر web service که در هر یک از عناصر <asp:serviceRefrence> در زیر کنترل <asp:ScriptManager

> داخل صفحه ، تولید می شود.

در متن اصلی مقاله به هم ریختگی وجود ندارد. برای مطالعه بیشتر مقاله آن را خریداری کنید