آموزش ASP.Net

آموزش ASP.Net - کار با Web Services

یک web service در واقع یک قابلیت مبتنی بر وب است که از طریق پروتکل های وب قابل دسترسی می باشد. web service ها توسط application های تحت وب مورد استفاده قرار می گیرند. در برنامه نویسی و تولید web service ها به سه جنبۀ مختلف برمی خوریم:

  • ایجاد web service
  • ایجاد proxy
  • استفاده از web service

ایجاد web service

Web service در اصل یک برنامه یا اپلیکیشن تحت وب متشکل از توابع و متدهایی است که توسط دیگر برنامه ها استفاده می شود. web service همچنین از معماری code-behind که در صفحات وب ASP.NET پیاده شده و بکار می رود پیروی می کند با این تفاوت که دارای رابط کاربری (UI) نمی باشد.

برای درک بهتر این مفهوم به ایجاد یک web service می پردازیم که اطلاعاتی در رابطه با ارزش و قیمت سهام عرضه می کند. مشتری ها (client) می توانند بر اساس نشانه ای (symbol) که برای سهام بکار رفته از اسم و قیمت سهام مربوطه query بگیرند (اسم و قیمت سهام مورد نظر را بر اساس symbol آن درخواست کنند). جهت آسان نگه داشتن این مثال، مقادیر لازمه درون یک آرایۀ دوبعدی hard-code شده اند. Web service مورد نظر دارای سه متد می باشد:

  • تابع پیش فرض HelloWorld
  • یک تابع GetName
  • تایع GetPrice

برای ایجاد web service مراحل زیر را دنبال کنید:

مرحلۀ اول: به بخش File -> New -> Web Site محیط ویژوال استودیو مراجعه کرده، سپس گزینۀ ASP.NET Web Service را انتخاب کنید.

مرحلۀ دوم: در این مرحله یک فایل web service به نام Service.asmx به همراه file code-behind آن، Service.cs در پوشۀ App_Code پروژه ایجاد می گردد.

مرحلۀ سوم: اسم فایل ها را به ترتیب به StockService.asmx و StockService.cs تغییر دهید.

مرحلۀ چهارم: فایل .asmx تنها یک WebService directive در خود دارد:

<%@ WebService Language="C#" CodeBehind="~/App_Code/StockService.cs" Class="StockService" %>

مرحلۀ پنجم: فایل StockService.cs را باز کنید. مشاهده می کنید که کد ایجاد شده در آن تنها یک سرویس ساده ی Hello World است. web service code behind file پش فرض مشابه کد زیر می باشد:

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";
      }
   }
}

مرحلۀ ششم: code behind file را اصلاح کرده و آرایۀ دو بعدی از رشته ها برای نشانۀ سهام، اسم، قیمت آن و دو متد ویژۀ بازایابی اطلاعات مربوط به سهام به آن اضافه کنید:

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";
   }
}

مرحلۀ هفتم: اجرای web service application یک web service test page در اختیار شما می گذارد که با استفاده از آن می توانید متدهای service را آزمایش کنید:

stock service

مرحلۀ هشتم: روی اسم متد کلیک کرده و مطمئن شوید درست عمل می کند:

get name service

مرحلۀ نهم : برای تست کردن متد GetName، یک از نشانه های سهام را که hard code شده است استفاده کنید. نشانه اسم سهام را باز می گرداند:

name of stock

استفاده از web service

برای استفاده از ،web service یک وب سایت تحت همان solution ای که قبلا ایجاد کرده بودید، بسازید. این کار از طریق راست کلیک روی اسم Solution در پنجره ی Solution Explorer امکان پذیر می باشد. صفحه ی وبی که web service را فرامی خواند باید برای نمایش دادن نتایج بازگشتی دارای یک کنترل label بوده و همچنین دو دکمه که یکی ویژه ی postback و دیگری ویژه ی فراخونی سرویس است داشته باشد.

content file  برنامۀ تحت وب مورد نظر به ترتیب زیر می باشد:

<%@ 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" onclick="Button1_Click" Text="Post Back" style="width:132px" />
               
            <asp:Button ID="btnservice" runat="server" onclick="btnservice_Click"  Text="Get Stock" style="width:99px" />
            
         </div>
      </form>
      
   </body>
</html>

code behind file برنامه:

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 proxy
using 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());
      }
   }
}

 

ایجاد proxy

Proxy در واقع به عنوان یک جانشین یا نماینده برای کدهای سرویس ایفای نقش می کند. ایجاد proxy پیش از استفاده از web service الزامی است. Proxy با برنامۀ کلاینت رجیستر می شود، پس از آن برنامه ی کلاینت web service را مانند یک تابع محلی (local method) فرامی خواند.

Proxy فراخوانی ها را دریافت کرده و آن را در قالب یا فرمت مناسب جای می دهد (wrap)، سپس آن را به صورت SOAP request (پروتکل دسترسی آسان به اشیا) به server ارسال می کند. SOAP سرواژۀ Simple Object Access Protocol می باشد. با استفاده از پروتکل دسترسی آسان به اشیاء (Simple Object Access Protocol - SOAP)  می‌توان به ارسال و تبادل پیامهایی از نوع XML بر روی شبکه‌های رایانه‌ای مبادرت کرد. به وسیله ی این پروتکل می توان به تبادل داده های web service پرداخت.

هنگامی که server پکیج SOAP را به کلاینت بازمی گرداند، proxy به رمز گشایی تمامی محتویات آن پرداخته سپس آن را در اختیار برنامۀ کلاینت (client application) می گذارد.

پیش از فراخوانی web service با استفاده از btnservice_Click، لازم است یک ارجاع به وب (web reference) به برنامه اضافه گردد. این کار یک کلاس proxy به صورت transparent ایجاد می کند که توسط رخداد 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());
}

جهت ایجاد proxy مراحل زیر را دنبال کنید:

مرحله (1): روی مدخل (entry) web applicationدر پنجرۀ Solution Explorer راست کلیک کرده و گزینۀ 'Add Web Reference' را انتخاب کنید:

 

add web reference

 

مرحله (2):'Web Services in this solution' را انتخاب کنید. ارجاع StockService برگردانده می شود.

select web services

مرحله (3):کلیک روی سرویس test web page را باز می کند. Proxy ایجاد شده به صورت پیش فرض 'localhost' نامیده می شود، در صورت تمایل می توانید آن را مجددا نام گذاری کنید. اکنون با کلیک روی 'Add Reference'، proxy را به برنامۀ کلاینت اضافه کنید.

stock service 2

با افزودن کد زیر، proxy را در فایل code behind بگنجانید:

using localhost;
در صورتی که سوال و یا نظری دارید، از بخش نظرات با ما در میان بگذارید.

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

شما چه نظر و یا سوالی درباره این نوشته دارید؟

مبحث آموزشی

آموزش ASP.Net

Learn ASP.Net

سرفصل ها

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

کلیک کنید و سوالات خود را از ما بپرسید
لطفا فرم سوال را پر کنید

سوال شما با موفقیت ثبت شد. برای اینکه بتوانیم به شما اطلاع رسانی کنیم، موارد زیر را وارد کنید:

لطفا چند لحظه منتظر بمانید ...