بی‌اطمینانی به مایکروسافت

سال‌های سال است که با محصولات مایکروسافت کار می‌کنم. دقیقاً از داس ۵ به این طرف. البته هیچ وقت هم با این موضوع مشکل خاصی نداشتم. هر وقت مایکروسافت داس را کنار می‌گذاشت و ویندوز را رو می‌کرد ما هم سراغ ویندوز می‌رفتیم، هر وقت ASP Classic را دور می‌انداخت ما هم همین کار را می‌کردیم و سراغ ASP.NET می‌رفتیم. خلاصه این که هر وقت مایکروسافت یکی از فناوری‌هایش را با فناوری جدیدتری جایگزین می‌کرد ما هم بدون هیچ اعتراضی همین کار را می‌کردیم. این تند تند عوض شدن فناوری را هم می‌گذاشتیم به حساب این که در دنیای کامپیوتر همه چیز تند تند عوض می‌شود و این ماییم که باید خودمان را با این موضوع تطبیق دهیم.

اما از وقتی که با NHibernate آشنا شدم و روال کار آن را با LINQ-to-SQL و Entity Framework مقایسه کردم دیدم که یک جای کار می‌لنگد. NHibernate با احستاب سوابق جاوایی‌اش چندین سال است که به خوبی کار کرده و خیلی کم دچار تغییرات شدید شده است. کلیاتی که از NHibernate یاد گرفته‌ام هنوز همان است و مجبور نشده‌ام به جز LINQ-to-NHibernate که یک افزونه جدید حساب می‌شود نه یک تغییر، چیز اساسی یاد بگیرم. اما کسانی که ORM را با مایکروسافت شروع کرده‌اند مثل من راحت نبوده‌اند. چون اول وقت زیادی روی LINQ-to-SQL گذاشتند ولی بعد از مدت کوتاهی به آنها اعلام شد که LINQ-to-SQL دیگر توسعه داده نخواهد شد و به جای آن باید از Entity Framework استفاده کنند. این یعنی چیزی را که یاد گرفته و به آن عادت کرده‌اید را باید به طور کامل دور ریخته و فناوری جدیدتری را با صرف کلی وقت یاد بگیرید.

مشابه این مسئله را در SourceSafe و جایگزینی آن با TFS هم دیده‌ام. کسانی که با SourceSafe کار می‌کردند مجبور شدند آن را با TFS عوض کنند. اما کسانی که از همان اول با SVN کار می‌کردند هیچ وقت دچار همچین اجباری نشدند. حدس می‌زنم همین مسئله را در مورد Web Serviceها از یک سو و ‎.Net Remoting و WCF از دیگر سو داشته باشیم.

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

‫فراخوانی Web Service از Client Side

همان طور که می‌دانیم فراخوانی و استفاده از Web Serviceها تنها از طریق کدهای Server Side امکان پذیر است، اما اگر بخواهیم یک برنامه آژاکسی Client Side بنویسیم و از Web Serviceها هم در کدهای جاوا اسکریپتی سمت کلاینت استفاده کنیم چه باید کرد؟ راه حل این مشکل در ASP.NET AJAX نهفته است. ASP.NET AJAX امکاناتی را ارائه می‌دهد که با کمک آنها می‌توان یک Web Service را درست مثل توابع داخلی جاوا اسکریپت فراخوانی کرد. اقدامات مورد نیاز برای انجام این کار:

۱- تعریف کلاس وب سرویس (asmx) به طور خاص
۲- معرفی وب سرویس مورد نظر با استفاده از Script Manager
۳- فراخوانی غیر همزمان متودهای دلخواه وب سرویس از کد جاوا اسکریپت

ASP.NET AJAX خودش خروجی وب سرویس را به JSON سریالایز کرده، در سمت کلاینت deserialize کرده و نهایتاً در قالب objectهای جاوا اسکریپتی (با ساختار مشابه objectهای سمت سرور) به کلاینت تحویل می‌دهد بدون آن که استفاده کننده یا برنامه‌نویس بویی از جزییات ببرد.
دقت کنید که تا اینجای کار فرض بر این بوده است که وب سرویس مورد نظر در همان سروری قرار دارد که صفحات aspx ما هم قرار دارند. در صورت نیاز به وب‌سرویس‌ها (و دیگر سرویس‌ها) در وب سایت‌های دیگر باید از راه حل‌های دیگری مثل Bridge استفاده کرد.

 

منبع: فصل ۵ کتاب ASP.NET Ajax in Action (در این فصل غیر از Web Serviceها، روش‌ها و ابزارهای دیگری نیز برای ارتباط Asynchronous با سرور گفته شده است)

مطالعه بیشتر:
۱- آشنایی با کتابخانه Microsoft Ajax Library
۲- ‫‫جاوا اسکریپتی قوی‌تر با Microsoft Ajax Library
۳- نمونه کدهای فصل پنج