از آنجاییکه شرکت مایکروسافت از ابتدای توسعه استاندارد SOAP با آن درگیر بوده است، تکنولوژی آن برای توسعه وبسرویسها از شرکتهای رقیب اندکی فاصله گرفته و بیشتر مورد اقبال واقع شده است. با استفاده از محیط توسعه .NET شرکت مایکروسافت، میتوان براحتی وبسرویسهای مورد نظر را تولید کرده و مورد استفاده قرار داد. در این نوشته میخواهیم به صورت قدم به قدم مراحل ساخت یک وبسرویس و یک برنامه تحت ویندوز برای استفاده از آن وبسرویس را دنبال کنیم. برای برنامهنویسی از محیط توسعه Visual Studio.NET استفاده خواهیم کرد، بنابراین قبل از اینکه به بحث اصلی یعنی نحوه کدنویسی بپردازیم، بهتر است اشاره کوتاهی به موارد و پیش نیازهای این محیط توسعه داشته باشیم.
برای استفاده از Visual Studio.NET یا .NET Framework SDK باید بر روی کامپیوتر خود Internet Information Server یا همان IIS را نصب کرده باشید. متاسفانه IIS و .NET بر روی ویندوزهای ME یا 98 قابل استفاده نمیباشد و بنابراین باید از یکی از ویندوزهای NT، 2000 یا XP Professional استفاده کرد. برای نصب IIS به Control Panel بروید و Add/Remove Programs را انتخاب کنید. در ستون سمت چپ، آیکونی با عنوان Add/Remove Windows Components وجود دارد. بر روی آن کلیک کنید. شکل زیر پنجره Add/Remove Windows Components را بر روی کامپیوتر من نمایش میدهد.

همانگونه که در شکل فوق میبینید جعبه انتخاب کنار IIS تیک خورده است و این یعنی IIS بر روی ویندوز من نصب شده است. اگر این جعبه انتخاب نشده باشد آنرا انتخاب کرده و با کلیک بر روی دکمه Next فرایند نصب آنرا دنبال کنید. پس از نصب IIS، میتوانید Visual Studio.NET یا .NET Framework SDK را بر روی کامپیوتر خود نصب کنید.
برنامهنویسی وبسرویس با استفاده از Visual Studio.NETمیخواهیم یک وبسرویس ایجاد کنیم که قیمت کالاهای مختلف موجود در انبار را بتوان از طریق آن بدست آورد. برنامههای دیگر میتوانند از طریق وب به این وبسرویس متصل شده و قیمت کالاها را دریافت نمایند. Visual Studio.NET را باز کنید. یک پروژه جدید از نوع ASP.NET Web Service و برای زبان C# ایجاد کنید. مسیر آنرا در وب تغییر دهید و یک نام مناسب برای آن انتخاب کنید(مثلا SimpleStockQuote). پنجره ایجاد پروژه جدید در شکل زیر نمایش داده شده است:

پس از ایجاد یک پروژه وبسرویس، در Visual Studio.NET پنجره طراحی برنامه نمایش داده خواهد شد. با استفاده از لینکی که بر روی این صفحه قرار داده شده است میتوانید به قسمت مربوط به کد برنامه بروید. یکسری کد اولیه تولید شده است که شامل نامهای پیشفرض برای شناسههای مختلف برنامه و همچنین کدهای استانداردی است که برای تولید هر وبسرویسی مورد نیاز میباشد.
نکته: کلید میانبر برای حرکت بین کد برنامه و وضعیت طراحی برنامه F7 و SHIFT+F7 میباشد.
در کد تولید شده قسمتی وجود دارد که با عبارت [WebMethod] شروع میشود و به صورت کامنت درآمده است. ابتدا این خط را از حالت کامنت خارج کنید و در خط بعد از آن، متدی را اضافه کنید که برای گرفتن قیمت کالاها از آن استفاده کنیم. نام این متد را GetQuote انتخاب میکنیم که یک پارامتر ورودی از نوع رشتهای خواهد داشت. این پارامتر رشتهای شامل نام کالا خواهد بود و خروجی آن از نوع اعشاری است و قیمت کالا را مشخص میکند. این متد را به صورت زیر مینویسیم:
[WebMethod]
public double GetQuote(string name)
{
if (name==”good1”) return 55.6;
else return -1;
}
به همین سادگی وبسرویس نوشته شده آماده اجرا شده است. از منوی Debug گزینه Start without Debugging را انتخاب کنید. این گزینه باعث اجرای برنامه و نمایش پنجره مرورگری مشابه شکل زیر میشود:

اولین لینک از این پنجره با عنوان Service Description باعث نمایش توصیف سرویس میشود که یک فایل WSDL است. برای نمایش توصیف وبسرویسهای توسعه داده شده توسط شرکت مایکروسافت که دارای پسوند asmx هستند، کافیست که پرسوجوی wsdl به آن ارسال شود. به عنوان مثال، در برنامهای که در بالا نوشتیم با استفاده از پرسوجوی زیر توصیف وبسرویس نمایش داده خواهد شد.
http://localhost/SimpleStockQuote/Service1.asmx?wsdl
شکل زیر اطلاعات WSDL را در پنجره مرورگر نمایش میدهد.

بعد از لینک مربوط به نمایش اطلاعات WSDL لینک GetQuote قرار دارد. از طریق این لینک میتوان به متد نوشته شده در وبسرویس دسترسی پیدا کرده و از آن استفاده نمود. انتخاب این لینک باعث نمایش پنجره زیر میشود.

اگر عبارت good1 را در قسمت name وارد کنید، جواب 55.6 را دریافت خواهید کرد. ورود هر عبارت دیگر باعث نمایش -1 خواهد شد.
مستندسازی وبسرویسبا استفاده از تگ WebMethod و همچنین تگ WebService در داخل کد برنامه میتوان توضیحات بیشتری از وبسرویس را برای مشتری آن فراهم کرد چه این مشتری یک صفحه وب باشد یا یک برنامه کاربردی. اگر دقت کرده باشید در هنگام اجرای وبسرویس در صفحه اول پس از نمایش لیست متدهای موجود در آن، پیغامی نمایش داده میشود که از شما میخواهد فضای نام(namespace) انتخاب شده برای وبسرویس خود را که یک نام پیشفرض برای آن انتخاب شده است را تغییر دهید. برای انتخاب یک فضاینام و همچنین توضیحاتی در مورد وبسرویس توسعه داده شده، میتوان از تگ WebService قبل از تعریف کلاس برنامه استفاده کرد. به عنوان مثال برای وبسرویس دریافت قیمت کالا که با یکدیگر نوشتیم، میتوان تغییرات زیر را در آن اعمال کرد.
…
[WebService(Description=”Webservice for Stock Quote”,
Namespace=”http://www.shojaee.com/”)]
public class Service1: System.Web.Services.WebService
{
…
با استفاده از تگ WebMethod و صفت Description آن میتوان توضیحاتی برای متدهای تعریف شده در وبسرویس به برنامه اضافه کرد. به عنوان مثال برای متد GetQuote میتوان از دستور زیر استفاده کرد.
[WebMethod(Description=”A simple method for getting Stock Quote. Submit good1 else get -1”)]
خروجی برنامه بعد از تغییرات فوق به صورت زیر خواهد بود.
تولید یک مشتری برای وبسرویسمشتری وبسرویس میتواند یک صفحه وب باشد یا یک برنامه کاربردی که در حقیقت از متدهای تعریف شده در وبسرویس استفاده میکنند. در ادامه یک برنامه تحت ویندوز ایجاد خواهیم کرد که از متد وبسرویسی که توسعه دادهایم استفاده خواهد کرد. برای استفاده از وبسرویس از طریق یک برنامه تحت ویندوز، Visual Studio.NET را باز کنید. در پنجره New Project گزینه Widows Application را انتخاب کنید. شکل زیر نحوه انتخاب درست را نمایش میدهد.

ظاهر برنامه را به صورت شکل زیر طراحی کنید. کافیست که دو جعبه متنی، دو برچسب و یک دکمه را به برنامه اضافه کنید و نامها و عناوین مناسبی برای آنها انتخاب نمایید.

حال در پنجره Solution Explorer بر روی پوشه References کلیک سمت راست کرده و گزینه Add Web Reference را انتخاب نمایید. در پنجرهای که ظاهر میشود باید URL مربوط به فایل WSDL وبسرویس را وارد کرده و کلید Enter را فشار دهید تا محتویات فایل WSDL وبسرویس در همان پنجره نمایش داده شود. حال دکمه Add Reference را انتخاب کنید. شکل زیر نمایشی از این پنجره را بر روی کامپیوتر من نمایش میدهد.

حال میتوان عمل کدنویسی برنامه را انجام داد. بر روی دکمه Get Quote در برنامه دوبار کلیک کنید. با اینکار قسمتی از کد برنامه که مربوط به رویداد کلیککردن دکمه است، نمایش داده خواهد شد. در این قسمت باید متنی که کاربر در جعبه متنی اول وارد کرده است را به عنوان پارامتر ورودی به متد GetQuote از وبسرویس ارسال کند و سپس نتیجه اجرای متد را در جعبه متنی دوم نمایش دهد. همانطور که در هنگام ایجاد مثال وبسرویس دیدیم، نامی که برای کلاس وبسرویس انتخاب شد، Service1 میباشد و GetQuote در حقیقت یک متد از این کلاس میباشد. طبق روال عادی فراخوانی یک چنین متدی، ابتدا باید یک شئ از نوع کلاس Service1 ایجاد کنیم و سپس متد GetQuote از آن شئ را فراخوانی کنیم. در هنگام اضافه کردن ارجاع به وبسرویس در شکل بالا، یک پوشه جدید به پنجره Solution Explorer با عنوان Web References اضافه میشود. در داخل این پوشه، پوشه دیگری اضافه شده است که حاوی فایل WSDL مربوط به همان کلاس Service1 میباشد. نام این پوشه مشخصکننده نام کلاسی است که باید در برنامه، یک شئ از آن ساخته شود. نام این پوشه در کامپیوتر من localhost است و بنابراین نام کلاس مربوط به وبسرویس بر روی کامپیوتر من localhost.Service1 خواهد بود. با توضیحات داده شده، کدی مشابه زیر، باید در رویداد onClick مربوط به دکمه Get Quote نوشته شد.
localhost.Service1 obj1=new localhost.Service1();
textBox2.Text = obj1.GetQuote(textBox1.Text).ToString();
حاصل اجرای برنامه به صورت زیر خواهد بود.
منبع:
Brian Hochgurtel, Cross-Platform Web Services Using C# and Java, 2003.