# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > WCF , Web Services , .Net Remoting >  مقدمه ای بر سرویس های وب

## xamfia

*مقدمه ای بر سرویس های وب
*امروزه دیگر بسیاری از توسعه دهندگان آینده وب را در سرویس های وب(web service) خلاصه می کنند و معتقد می باشند تنها راه رهایی از پیچیده گی به وجود آمده که ناشی از گسترش بی حد و حصر سیستم های نرم افزاری مختلف می باشد بهره گیری از سرویس های وب می باشد. 
سرویس های وب را می توانیم مهمترین،قویترین و محوریترین ابزار معماری سرویس گرا(SOA) نامید و می توان گفت اگر سرویس های وب را از معماری سرویس گرا جدا کنیم این فرایند جدید دیگر هیچ قدرتی برای به کرسی نشاندن حرف هایش ندارد!!
اگر بخواهم تعریف ساده ای از سرویس های وب داشته باشم باید عرض کنم که این پدیده با بهره گیری از XML که امروزه تقریبا برای همه سیستم های توسعه قابل شناسایی و تدوین است می تواند بین سیستم های مختلف که با زبان های مختلف ،روی Platform های مختلف،با معماری و تکنولوژی های مختلف پیاده سازی شده اند ارتباط برقرار کند.(به تکرار بیش از اندازه کلمه "مختلف" توجه کنید)
سرویس های وب با بهره گیری از تکنولوژی XML- RPC که از تکنولوژی های جدید سیستم عامل ها برای فراخوانی توابع راه دور می باشد می توانند با XML توابعی را از را دور صدا بزنند!! که این نعمت خود دنیای جدیدی را در معماری سرویس گرا باز کرده است به طوری که همینک سازمانها بجای اینک کد و کامپوننت خود را در اختیار مشتری قرار دهند میتوانند به او قابلیت فراخوانی توابع مورد نیازش را بدهند که در واقع همین مهم است که امروزه زمینه ساز چیزی به نام خدمات و تجارت سرویس شده است. 
در این میان احتمال دارد سوالات فراوانی به ذهن شما خطور کرده است.مثل اینکه:
آیا ما از هر نوع استاندارد و حالتی می توانیم برای ساخت XML سرویس هایمان استفاده کنیم؟
آیا اصلا استانداردهایی وجود دارد؟؟
برای انتقال XML بین مشتری و خادم باید از پروتکل خاصی استفاده کرد؟؟
آیا هر کسی می توانند سرویس های خود را منتشر کند و به چه شکل؟
آیا جایی برای شناسایی سرویس هایی که قبلا دیگران نوشته اند وجود دارد؟
ما چطور سرویس هایمان را به دیگران معرفی کنیم؟
سرویس هاس مختلف با فرمت های متفاوت چگونه می تواند بین هم ارتباط برقرار کنند؟؟
چه ابزارهایی امروزه برای توسعه سرویس های وب و معماری سرویس گرا عرضه شده است؟؟...
امیدوارم در آینده نزدیک بازهم وقت کنیم تا در این تاپیک مطالبی را پیرامون سرویس های وب درج کنم.بدون شک در آن مطالب سعی خواهم کرد تا حد ممکن بازهم به زبان ساده(!) جواب بسیاری از سوالات بالا را بدهم.
البته امیدوارو در این بین دوستانی پیدا شوند و به برخی ار این سوالات پاسخ های گره گشایی بدهند.

سپاسگزارم.
 

میثم نواییWWW.PersianWebService.comMeysam.Navaei@Gmail.com

----------


## milad_mhb

سلام ممنون از مقالتون.من يه مقاله فارسي كامل در مورد WSDL مي خواستم ممنون ميشم اگه كمكم كنين. با تشكر

----------


## prankster

مطلب خوبی نوشتید، ممنون
من هم دوست دارم در این تاپیک بیشتر بنویسیم و بحث کنیم

در ادامه مطلب شما



> می توان گفت اگر سرویس های وب را از معماری سرویس گرا جدا کنیم این فرایند جدید دیگر هیچ قدرتی برای به کرسی نشاندن حرف هایش ندارد!!


با این گفته موافق نیستم، گرچه سرویس های وب استاندارد بخش اعظم معماری سرویس گرا هستند اما این به این معنی نیست که معماری سرویس گرا کاملا وابسته به سرویس های وب است و یا به تنهایی حرفی برای گفتن ندارد. شاید بهتر است دامنه گسترش برنامه مبتنی بر معماری سرویس گرا را مشخص کنیم. برنامه های مبتنی بر معماری سرویس گرا از شیوه های متنوعی برای ارتباط استفاده می کنند که یکی از آنها استاندارد های وب سرویس است. عمده مزیت استفاده از وب سرویس قبولی آن توسط پلتفرم های عمده و عدم وابستگی به محیط برنامه نویسی است، در صورتی که پلتفرم های مورد استفاده فقط مایکروسافت است و یا فقط مبتنی بر Net. یا Java هستیم روش ها و پروتکل های متناظر با بازدهی امنیت و سرعت بالاتری نسبت به وب سرویس وجود دارند برای مثال کل SQL Database Server مبتنی بر معماری سرویس گراست و از وب سرویس هم استفاده نمی کند. در معماری جدید مایکروسافت در بسته WCF چهار نوع اصلی ارتباط و بیش از 10 پروتکل برای معماری سرویس گرا پیشنهاد شده است که هر کدام بسته به نیاز حرف زیادی برای گفتن دارند

آیا ما از هر نوع استاندارد و حالتی می توانیم برای ساخت XML سرویس هایمان استفاده کنیم؟
آیا اصلا استانداردهایی وجود دارد؟؟
برای انتقال XML بین مشتری و خادم باید از پروتکل خاصی استفاده کرد؟؟

بله فکر می کنم از هر نوع استانداردی می توان برای توصیف وب سرویس و انتقال دیتا استفاده کرد مشکل فقط اینجاست که دو طرف سرویس دهنده و سرویس گیرنده باید آشنا به این استاندارد باشند. عملا چیزی که وب سرویس را به صورت استاندارد درآورده است استفاده از استاندارد هایی است که پلتفرم های متفاوت بر روی آنها توافق کرده اند. استاندارد های متفاوتی برای توصیف وب سرویس و انتقال داده وجود دارند که معروف ترین آنها WSDL و WSCL و SOAP و Hessian و UDDI و ... است که از این میان WSDL برای توصیف و SOAP به عنوان پروتکل ارتباطی معروفتر از بقیه هستند




> آیا هر کسی می توانند سرویس های خود را منتشر کند و به چه شکل؟


بله. هر سرویس دهنده ای که مبتنی بر پلتفرم برنامه وب سرویس ما باشد می تواند به عنوان host برای وب سرویس ما مورد استفاده قرار گیرد. بر عکس سرویس گیرنده که وابستگی به پلتفرم خاصی برای استفاده از وب سرویس ندارد، سرویس دهنده باید حتما از پلتفرمی که وب سرویس بر روی آن توسعه یافته است پشتیبانی کند. برای مثال وب سرویس های مبتنی بر Net. را می توان بر روی کلیه سرویس دهنده های وب مبتنی بر دات نت host کرد، مثلا در IIS و یا Windows Service و یا application server های مبتنی بر Net. در این میان شاید وب سرویس های مبتنی بر Java گستردگی بیشتری داشته باشند زیرا application server های بسیار گسترده ای از آنها پشتیبانی می کنند مثل Cold Fusion، JRun, Bea WebLogig, IBM WebSphere و ... ضمن اینکه Web Server هایی که از آن پشتیبانی می کنند هم Open Source هستند مثل Apache Tomcat

آیا جایی برای شناسایی سرویس هایی که قبلا دیگران نوشته اند وجود دارد؟

معروف ترین سایتی که من می شناسم XMethods است که سالهاست انواع وب سرویس ها را معرفی می کند




> ما چطور سرویس هایمان را به دیگران معرفی کنیم؟


به همان صورتی که وب سایت هایمان را معرفی می کنیم! تبلیغ! منتها استفاده کننده از سرویس وب developer هایی هستند که با استفاده از وب سرویس برنامه های کاربردی ایجاد می کنند. نکته قابل توجه این است که یک وب سرویس همانند یک وبسایت دارای یک آدرس کاملا منحصر به فرد است که از استاندارد TCP/IP برای route کردن مسیر استفاده می کند

سرویس هاس مختلف با فرمت های متفاوت چگونه می تواند بین هم ارتباط برقرار کنند؟؟

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




> چه ابزارهایی امروزه برای توسعه سرویس های وب و معماری سرویس گرا عرضه شده است؟؟


مهمترین پلتفرم هایی که امروز برای توسعه وب سرویس مورد استفاده قرار می گیرند Java و Net. هستند، اکثر پیاده سازی های دیگر مثلا با استفاده از ColdFusion و یا DataFlex در نهایت بر روی همین دو پلتفرم توسعه یافته اند. مایکروسافت با توسعه و پیشنهاد بسته WCF عملا وب سرویس را به صورت استانداردی برای توسعه معماری سرویس گرا در کنار بقیه روش های توسعه مانند Pipe یا TCP قرار داده است و Java Beans و Java Web Services در Java بسته هایی برای توسعه وب سرویس های مبتنی بر Java هستند.
در مورد روش های توسعه و ابزار های آن با استفاده از این ابزار ها فکر می کنم پست های بیشتری لازم است.

مهمترین ضعف وب سرویس عدم پشتیبانی آن از ارتباط Duplex و peer-to-peer است به نحوی که وب سرویس را تنها به عنوان یک سرویس دهنده و ارتباط را به صورت یک طرفه نگه می دارد. در مورد امکان ارتباط duplex در استاندارد جدید وب سرویس چیزهایی خوانده ام، در WCF هم wsDualHttpBinding ارتباط دوطرفه مبتنی بر وب سرویس را مهیا می کند که چیز زیادی در مورد آن نمی دانم. 
سوال: ارتباط دوطرفه بر مبنای وب سرویس، استاندارد ها و پلتفرم های توسعه؟؟؟

----------


## xamfia

از پاسخ هایی مفیدی که داده اید سپاسگزارم.
اما در مورد سوالتان اگر امکان دارد توضیحات بیشتری بدهید.
اما اساس سرویس های وب با مبتنی بر client/server می باشد.
اما در طی روز های آینده در مورد سوالتان بررسی می کنم و در اسرع وقت پاسخم را می گزارم.

----------


## xamfia

ارتباط دو طرفه به صورت عادی با استفاده از وب سرویس امکان پذیر نیست.البته اگر منظور شما از ارتباط دوطرفه همان چیزی باشد که در ذهن من است،یعنی بدون اینکه ما از کاربر درخواستی دریافت کنیم به او پاسخ دهیم.
در واقع  وب سرویس با توجه به اینکه روی بستر وب بنانهاده شده است اساس اش REQ/RES می باشد.
البته من اطلاعاتم کافی نیست در این مورد اگر کسی می تواند بیشتر کمک کند جواب دهد...

----------


## xamfia

SOAP  
(simple object access protocol)
soap نیز در واقع چیزی جز xml + یک سری پروتکل های تعیین شده برای انتقال فایل داده ما نیست.
بخش های مختلف soap یک زبان را با چندین عنصر و صفت توصیف میکند.این اطلاعات را می توان از طریق هر پروتکلی منتقل کرد ولی به خاطر ماهیت وب سرویس بیشتر از پروتکل HTTP و دیگر پروتکل های وب ارسال می شود.
دو روش برای استفاده از soap وجود دارد:
1. به شیوه فراخوانی توابع را دور(RPC) 
remote orocedure call
2.به شیوه سند(WSDL)

----------

