میخواستم برای انجام کاری یک صفحه آژاکسی جدید بسازم. وظیفه این صفحه مانیتورینگ یکی از فعالیتهایی بود که در Web Server اتفاق میافتاد. اولش فکر میکردم انجام آن خیلی سخت نباشد. یک Label را وسط یک UpdatePanel میگذارم، event سروری مورد نظرم را مشترک شده و سپس در handler آن، Label را به روز رسانی کرده و نهایتاً متود update کنترل UpdatePanel را فراخوانی میکنم. اما کار به این سادگیها که فکر میکردم نبود. آن event فایر میشد، کد handler اجرا میشد ولی اصلا کنترلهای UpdatePanel به روز رسانی نمیشدند. با کمی ور رفتن با UpdatePanel فهمیدم که باید آن event به نوعی در Triggers کنترل UpdatePanel قرار میگرفت. اما مشکل از آنجا بود که Triggers فقط کنترلها را به عنوان عضو قبول میکرد. بعد از کمی جستجوی اعصاب خرد کن دیگر فهمیدم که کار من از بیخ و بن اشتباه و بر خلاف منطق HTTP و آژاکس است! با آژاکس میتوان صفحه موجود در کلاینت را بدون PostBack به روز رسانی کرد اما این موضوع وقتی اتفاق میافتد که یک درخواست از کلاینت به سرور ارسال شود. در مورد کاری که من میخواستم انجام دهم هیچ درخواستی از کلاینت وجود ندارد و این سرور است که میخواهد بدون درخواست کلاینت به آن اطلاعات بفرستد. شاید شما هم در این لحظه مثل من به یاد صفحه Gmail افتاده باشید و بپرسید پس Gmail چطور این کار را میکند؟ همان طور که میدانیم اگر صفحه Gmail باز باشد و ایمیل جدیدی به Inbox شما وارد شده باشد این موضوع خود به خود و بدون درخواست قبلی شما در صفحه Gmailتان منعکس میگردد. چنین مکانیزمی در friendfeed و twitter هم وجود دارد. کاربر صفحه خاصی از سایت را باز میکند و بدون آن که هیچ کاری انجام دهد فقط به صفحه نگاه میکند. صفحه هم اتفاقات سمت سرور (رسیدن ایمیل جدید، دریافت تویت جدید، کامنت جدید و…) را بدون درخواست شما در صفحه نمایش میدهد.
روشی که Gmail و بقیه استفاده میکنند به روش Polling معروف است. در این روش موتور جاوا اسکریپتی آژاکس که در کلاینت فعال است از یک تایمر استفاده کرده و هر چند ثانیه یک بار به سرور متصل شده و در صورت وجود اطلاعات جدید، از سرور درخواست مینماید آنها را به کلاینت بفرستد. این طوری کاربر حس میکند که این سرور است که اطلاعات جدید را به کلاینت میفرستد در حالی که واقعاً باز هم این خود کلاینت است که این درخواست را میفرستد.
پیادهسازی این مکانیزم در ASP.NET AJAX کار سادهای است. فقط کافیست یک کنترل Timer به صفحه ASPX اضافه کرده و آن را به فهرست Triggers کنترل UpdatePanel اضافه نمایید البته فقط ایونت Tick آن را. سپس بقیه موارد را تنظیم کرده و عملیات مورد نظر خود را به Handler مربوط به Timer.OnTick اضافه کنید. لطفاً اصل ماجرا را در کد زیر مشاهده فرمایید:
روشی که Gmail و بقیه استفاده میکنند به روش Polling معروف است. در این روش موتور جاوا اسکریپتی آژاکس که در کلاینت فعال است از یک تایمر استفاده کرده و هر چند ثانیه یک بار به سرور متصل شده و در صورت وجود اطلاعات جدید، از سرور درخواست مینماید آنها را به کلاینت بفرستد. این طوری کاربر حس میکند که این سرور است که اطلاعات جدید را به کلاینت میفرستد در حالی که واقعاً باز هم این خود کلاینت است که این درخواست را میفرستد.
پیادهسازی این مکانیزم در ASP.NET AJAX کار سادهای است. فقط کافیست یک کنترل Timer به صفحه ASPX اضافه کرده و آن را به فهرست Triggers کنترل UpdatePanel اضافه نمایید البته فقط ایونت Tick آن را. سپس بقیه موارد را تنظیم کرده و عملیات مورد نظر خود را به Handler مربوط به Timer.OnTick اضافه کنید. لطفاً اصل ماجرا را در کد زیر مشاهده فرمایید:
<asp:Timer ID=”MyTimer” runat=”server” Interval=”2000″ OnTick=”MyTimer_Tick” Enabled=”true”>
</asp:Timer>
<asp:UpdatePanel ID=”up” runat=”server”>
<ContentTemplate>
<asp:TextBox ID=”txaLog” runat=”server” TextMode=”MultiLine” SkinID=”BlackTerminalLTRWide”
Rows=”20″ Width=”350″ Style=”direction: rtl; text-align: left” />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID=”MyTimer” EventName=”Tick” />
</Triggers>
</asp:UpdatePanel>
</asp:Timer>
<asp:UpdatePanel ID=”up” runat=”server”>
<ContentTemplate>
<asp:TextBox ID=”txaLog” runat=”server” TextMode=”MultiLine” SkinID=”BlackTerminalLTRWide”
Rows=”20″ Width=”350″ Style=”direction: rtl; text-align: left” />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID=”MyTimer” EventName=”Tick” />
</Triggers>
</asp:UpdatePanel>
Comments
سلام
احوالات چطوره ؟
امروز یک جلسه ای داشتم صحبت از ECE شد و منهم تنها چیزی که یادم بود همین مطالبی بود که در وبلاگ شما خوانده بودم . به خیر گذشت و آبروی ما نرفت . تا رسیدم شرکت گفتم اول از شما تشکر کنم !
ارادتمند
یزدی نژاد
قابل نداشت! اتفاقاً من خودمم هم چند هفته گذشته حسابی با ECE درگیر بودم و پوستم کاملاً کنده شده. پیشنهاد میکنم ECE را اصلاً به عنوان یکی از قابلیتهای دبیرخانه نبینی بلکه آن را یک سیستم بسیار پردردسر و هم قواره خود دبیرخانه ببین.
سلام آقای محبی، ببخشید این نظر من ربطی به این مطلب شما نداره.
من یه ایمیل برای شما فرستادم، میخواستم بدونم به دستتون رسیده یا نه!؟
ایمان عزیز، هیچی ایمیلی از شما به من نرسیده است. ایمیل من این است: afshar dot mohebbi atsign gmail dot com
دی: آقا قیافت خیلی شبیه آرنولده جون داداش . تبریک . مطالب وبلاگت هم خفن . استفاده بردیم .
explained below. Know the correct size: [url=http://www.onlyyoutony.com]ralph lauren homme[/url]blend of the right texture with the right [url=http://www.onlyyoutony.com]polo ralph lauren pas cher[/url]fakes because bits of them would "come off" [url=http://www.onlyyoutony.com]ralph lauren pas cher[/url]handbag will greatest compliment your [url=http://www.onlyyoutony.com]http://www.onlyyoutony.com[/url] even though the fermentation, which you [url=http://www.onlyyoutony.com]http://www.onlyyoutony.com[/url] use, the kit helps shoppers organize their
As a possible inform customer, listed here are 2 details that you can consider to get the [url=http://ywashst.com]order lifecell[/url] you should seek out for in age defying anti-aging skin color ointments, you can travel to my web site. lifecell It's really a shame but eight periods from 15 you http://ywashst.com Eye Luggage