.NET Remoting سیستمی کلی برای برقراری ارتباط بین Applicationهاست. امتیاز ویژه ی آن در برابر دیگر سیستمهای ارتباطی این است که می تواند در اتصالات ناهمگن یک شبکه و حتی بین کامپیوترهای مختلف با زبانهای متفاوت به کار رود. .NET Remoting یکی از APIهای مایکروسافت است که در سال 2002 با .NET Framework 1.0 منتشر شد . آنچه که انجام می شود عمدتا بر اساس ایجاد شیئی است که اصطلاحا آن را Remotable Object می نامند.
سیستم .NET Remoting شما را قادر می سازد تا بین اشیاء متفاوت در برنامه هایی با دامنه های متفاوت یا پردازشهای متفاوت با استفاده از پروتکل های انتقالی مختلف مانند HTTP ، TCP/IP ، SOAP و ... ارتباط برقرار نمایید.
در سمت client و server چه بر سر Remotable object می آید؟
در ابتدا نیاز داریم که client تنها شیوه ی نمایش نتیجه را بشناسد. هنگامی که درخواستی به وجود می آید ، Remotable Objectبه Client ارجاع داده می شود. در سمت client یک نمونه ی ساختگی شامل متدها و پارامترها، از این شیئ ایجاد می شود که به عنوان شیئ محلی مورد استفاده قرار می گیرد.سپس یک Proxy برای ارتباط سرور و Clientایجاد می شود.متدهایی از شیئ و مقدار هایی که باید به آنها داده شود همگی به ترتیب به صورت رشته ای از بایتها توسط این Proxy به سرور انتقال می یابد .Proxy آنها را برای سرور می خواند ، متدها فراخوانی شده و نتیجه دوباره در Proxy قرار می گیرد تا سمت client به نمایش در آید.
Remotable objectها از طریق کانالهای ارتباطی قابل دسترسی هستند که به صورت فیزیکی پیامها را به آنها انتقال می دهند.در اینجا دو نوع کانال موجود است TCP channel & Http channel نام آنها روشی را که باید مورد استفاده قرار گیرند به پروتکل می دهد.
ساختن Remotable Object
Remotable object چیزی بیش از یک شیئ که از MarshalByRefObject ارث می برد نیست.نمونه ای که در زیر آمده متدی است برای نمایش کلمه ی “Hello World” که یک رشته بر می گرداند.آنچه که در متدها برگردانده می شود تنها باید کلاسی از .NET Framwork باشد مانند String یا DataSet. به علاوه در صورتی که لازم است شیئی که تعریفی دیگر دارد را بسازید باید Serializable باشد .
ساختن یک سرور برای نمایش Remotable Object
ما احتیاج به سروری داریم که مانند یک شنونده (Listener) عمل کند و منتظر درخواستی از remotable object باشد. به طور مثال از کانال TCP/IP استفاده می کنیم. ابتدا یک نمونه از کانال را می سازیم سپس آن را برای استفاده از Client روی Port خاصی ثبت می کنیم.این سرویس می تواند هم مانند WellKnownObjectMode.SingleCall ثبت شود که برای هر Client نمونه ی جدیدی از شیئ را نتیجه می دهد، و هم می تواند به صورت WellKnownObjectMode.Singleton باشد که از یک نمونه شیئ را برای تمام Clientها نتیجه می دهد.سپس ارجاعی از SampleObject را که قبلا ساختیم در کلاس جدید قرار می دهیم.در غیر این صورت برنامه کامپایل نمی شود زیرا نمی داند چگونه به آن دسترسی پیدا کند.
اگر می خواهید از IIS استفاده کنید نیازی به ساختن سروری شنونده ندارید، چرا که IIS تنها استفاده از HttpChannelرا پشتیبانی می کند.یک دایرکتوری مجازی (virtual directory) بسازید و کد را برای ثبت در رویداد شروع (Application_Start event) قرار دهید.
ساختن Client برای استفاده از Remotable Object
حالا باید یک Client برای استفاده از آنچه که ساخته ایم، ایجاد کنیم.ساختن Client ساده است، ما می خواهیم به سرور وصل شود یک نمونه از سرور ایجاد کند سپس متد HelloWorld را اجرا کند.
خواننده ایم هنوز !!! :دی
ممنون از لصفت مصی :)