ASP.NET - خدمات وب

وب سرویس یک عملکرد مبتنی بر وب است که با استفاده از پروتکل های وب برای استفاده توسط برنامه های کاربردی وب قابل دسترسی است. سه جنبه توسعه وب سرویس وجود دارد:ایجاد وب سرویسایجاد یک پروکسیمصرف وب سرویسایجاد وب سرویسوب سرویس یک برنامه کاربردی وب است که اساساً کلاسی متشکل از روش هایی است که می تواند توسط سایر برنامه ها استفاده شود. همچنین از معماری کد پشتی مانند صفحات وب ASP.NET پیروی می کند، اگرچه رابط کاربری ندارد.برای درک مفهوم، اجازه دهید یک وب سرویس برای ارائه اطلاعات قیمت سهام ایجاد کنیم. مشتریان می توانند در مورد نام و قیمت سهام بر اساس نماد سهام استعلام کنند. برای ساده نگه داشتن این مثال، مقادیر در یک آرایه دو بعدی کدگذاری می شوند. این وب سرویس سه روش دارد:یک روش پیش‌فرض HelloWorldیک روش GetNameیک روش GetPriceمراحل زیر را برای ایجاد وب سرویس انجام دهید:مرحله (1): File -> New -> Web Site را در Visual Studio انتخاب کنید و سپس ASP.NET Web Service را انتخاب کنید.مرحله (2) : یک فایل سرویس وب به نام Service.asmx و کد پشت فایل آن Service.cs در پوشه App_Code پروژه ایجاد می شود.مرحله (3): نام فایل ها را به StockService.asmx و StockService.cs تغییر دهید.مرحله (4): فایل .asmx به سادگی یک دستورالعمل WebService روی آن دارد:<%@ WebService Language="C#" CodeBehind="~/App_Code/StockService.cs" Class="StockService" %>مرحله (5): فایل StockService.cs را باز کنید، کد تولید شده در آن سرویس اصلی Hello World است. کد پیش‌فرض وب سرویس پشت فایل به شکل زیر است:using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Linq;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;using System.Xml.Linq;namespace StockService{ // <summary> // Summary description for Service1 // <summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ToolboxItem(false)] // To allow this Web Service to be called from script, // using ASP.NET AJAX, uncomment the following line. // [System.Web.Script.Services.ScriptService] public class Service1 : System.Web.Services.WebService { [WebMethod] public string HelloWorld() { return "Hello World"; } }}مرحله (6): کد پشت فایل را تغییر دهید تا آرایه دو بعدی رشته ها را برای نماد سهام، نام و قیمت و دو روش وب برای دریافت اطلاعات سهام اضافه کنید.using System;using System.Linq;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;using System.Xml.Linq;[WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]// To allow this Web Service to be called from script, // using ASP.NET AJAX, uncomment the following line. // [System.Web.Script.Services.ScriptService]public class StockService : System.Web.Services.WebService{ public StockService () { //Uncomment the following if using designed components //InitializeComponent(); } string[,] stocks = { {"RELIND", "Reliance Industries", "1060.15"}, {"ICICI", "ICICI Bank", "911.55"}, {"JSW", "JSW Steel", "1201.25"}, {"WIPRO", "Wipro Limited", "1194.65"}, {"SATYAM", "Satyam Computers", "91.10"} }; [WebMethod] public string HelloWorld() { return "Hello World"; } [WebMethod] public double GetPrice(string symbol) { //it takes the symbol as parameter and returns price for (int i = 0; i < stocks.GetLength(0); i++) { if (String.Compare(symbol, stocks[i, 0], true) == 0) return Convert.ToDouble(stocks[i, 2]); } return 0; } [WebMethod] public string GetName(string symbol) { // It takes the symbol as parameter and // returns name of the stock for (int i = 0; i < stocks.GetLength(0); i++) { if (String.Compare(symbol, stocks[i, 0], true) == 0) return stocks[i, 1]; } return "Stock Not Found"; }}مرحله (7) : اجرای برنامه وب سرویس یک صفحه تست وب سرویس را ارائه می دهد که امکان آزمایش روش های سرویس را فراهم می کند.مرحله (8): روی نام یک روش کلیک کنید و بررسی کنید که آیا به درستی اجرا می شود یا خیر.مرحله (9): برای آزمایش روش GetName، یکی از نمادهای سهام را ارائه دهید که کدگذاری سختی دارند، نام سهام را برمی گرداند.مصرف وب سرویسبرای استفاده از وب سرویس، یک وب سایت تحت همان راه حل ایجاد کنید. این کار را می توان با کلیک راست روی نام Solution در Solution Explorer انجام داد. صفحه وب که سرویس وب را فراخوانی می کند باید دارای یک کنترل برچسب برای نمایش نتایج برگشتی و دو دکمه کنترل یکی برای ارسال مجدد و دیگری برای تماس با سرویس باشد.فایل محتوای وب اپلیکیشن به شرح زیر است:<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="wsclient._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> Untitled Page </title> </head> <body> <form id="form1" runat="server"> <div> <h3>Using the Stock Service</h3> <br /> <br /> <asp:Label ID="lblmessage" runat="server"></asp:Label> <br /> <br /> <asp:Button ID="btnpostback" runat="server" ="Button1_Click" Text="Post Back" style="width:132px" /> <asp:Button ID="btnservice" runat="server" ="btnservice_Click" Text="Get Stock" style="width:99px" /> </div> </form> </body></html>کد پشت فایل برای برنامه وب به شرح زیر است:using System;using System.Collections;using System.Configuration;using System.Data;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;//this is the proxyusing localhost;namespace wsclient{ public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { lblmessage.Text = "First Loading Time: " + DateTime.Now.ToLongTimeString } else { lblmessage.Text = "PostBack at: " + DateTime.Now.ToLongTimeString(); } } protected void btnservice_Click(object sender, EventArgs e) { StockService proxy = new StockService(); lblmessage.Text = String.Format("Current SATYAM Price:{0}", proxy.GetPrice("SATYAM").ToString()); } }}ایجاد پروکسیپروکسی یک پایه برای کدهای سرویس وب است. قبل از استفاده از وب سرویس، باید یک پروکسی ایجاد شود. پروکسی با برنامه مشتری ثبت شده است. سپس برنامه مشتری با استفاده از روش محلی، با سرویس وب تماس می گیرد.پروکسی تماس ها را می گیرد، آن را در قالب مناسب بسته بندی می کند و به عنوان یک درخواست SOAP به سرور ارسال می کند. SOAP مخفف عبارت Simple Object Access Protocol است. این پروتکل برای تبادل داده های وب سرویس استفاده می شود.هنگامی که سرور بسته SOAP را به مشتری برمی گرداند، پروکسی همه چیز را رمزگشایی می کند و آن را به برنامه مشتری ارائه می دهد.قبل از تماس با وب سرویس با استفاده از btnservice_Click، یک مرجع وب باید به برنامه اضافه شود. این یک کلاس پراکسی به صورت شفاف ایجاد می کند که توسط رویداد btnservice_Click استفاده می شود.protected void btnservice_Click(object sender, EventArgs e){ StockService proxy = new StockService(); lblmessage.Text = String.Format("Current SATYAM Price: {0}", proxy.GetPrice("SATYAM").ToString());}برای ایجاد پروکسی مراحل زیر را انجام دهید:مرحله (1): روی ورودی برنامه وب در Solution Explorer کلیک راست کرده و روی «افزودن مرجع وب» کلیک کنید.مرحله (2): "Web Services in this solution" را انتخاب کنید. مرجع StockService را برمی گرداند.مرحله (3): با کلیک بر روی سرویس، صفحه وب آزمایشی باز می شود. به طور پیش فرض پروکسی ایجاد شده "localhost" نام دارد، می توانید نام آن را تغییر دهید. برای افزودن پروکسی به برنامه مشتری، روی «افزودن مرجع» کلیک کنید.با افزودن پروکسی در کد پشت فایل:using localhost;