Web Service ها در ASP.Net

چهارشنبه 4 شهریور 1394

در این مقاله شرح خواهیم داد که یک وب سرویس چیست و چگونه می توان یک وب وب سرویس ساخت و از آن استفاده کرد.

Web Service ها در ASP.Net

وب سرویس:

وب سرویس ها کامپوننت هایی روی وب سرور هستند که اپلیکیشن کلاینت می تواند با ایجاد یک HTTP Request آن را فراخوانی کند. ASP.Net شما را قادر می سازد تا وب سرویس های سفارشی بسازید و یا از وب سرویس های پیش فرض آن استفاده کنید و این سرویس ها را از هر اپلیکیشن کلاینتی فراخوانی کنید.

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

- HTTP

- XML

- SOAP

در ادامه اصطلاحاتی را که معمولا در زمینه وب سرویس استفاده می کنیم، مرور خواهیم کرد:

SOAP: کوتاه شده عبارت Simple Object Access Protocol می باشد. SOAP روشی است که به وسیله آن متدهای فراخوانی شده به فرمت XML ترجمه شده و از طریق HTTP ارسال می شود.

WSDL: زبان توصیف وب سرویس و یا Web Service Description Language است. WSDL شامل جزییات بسیاری درباره استفاده از وب سرویس، متدها و propertyهای فراهم شده توسط وب سرویس، URL هایی که مشخص می کنند این متدها از چه طریقی قابل دسترسی هستند و انواع داده های استفاده شده، می باشد.

UDDI: کوتاه شده عبارت Universal Description, Discovery and Integration می باشد که یک سرویس دایرکتوری است که مشاغل مختلف می توانند ثبت نام کنند و وب سرویس مناسب خود را جستجو کنند.

Discovery یا فایل های Disco. : معمولا این فایل ها زمانی که جستجویی برای وب سرویس انجام می گیرد، به جای اشاره به وب سرویس، به منابع WSDL اشاره می کنند.

حال می خواهیم ببینیم، چگونه می توان در # ASP.Net C یک وب سرویس ساخت و از آن استفاده کرد. شکل زیر جدولی را که می خواهیم با استفاده از وب سرویس از آن داده ها را واکشی کنیم، در حالت Design نشان می دهد.

کد زیر، اسکریپت جدول بالا را نشان می دهد:

    CREATE TABLE [dbo].[Employee](  
        [Emp_ID] [int] IDENTITY(1,1) NOT NULL,  
        [Name] [nvarchar](50) NULL,  
        [Designation] [nvarchar](50) NULL,  
        [City] [nvarchar](50) NULL,  
        [State] [nvarchar](50) NULL,  
        [Country] [nvarchar](50) NULL,  
     CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED   
    (  
        [Emp_ID] ASC  
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]  
    ) ON [PRIMARY]  
    GO  

داده های جدول نیز به طور مثال به صورت زیر می باشد:

ویژوال استودیو را باز کرده و یک پروژه از نوع Empty می سازیم، سپس روی نام پروژه در Solution explorer کلیک کرده و یک Web Service به آن اضافه می کنیم.

سپس Service.cs را باز کرده و WebMethod آن را به شکل زیر می نویسیم:

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Web;  
    using System.Web.Services;  
    using System.Data.SqlClient;  
    using System.Data;  
    using System.Xml;  
      
    [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 Service : System.Web.Services.WebService  
    {  
        public Service()  
        {  
            //Uncomment the following line if using designed components   
            //InitializeComponent();   
        }  
      
        [WebMethod]  
        public XmlElement GetEmployeeSearchResult(string EMP_Name)  
        {  
            using (SqlConnection con = new SqlConnection(@"Data Source=INDIA\MSSQLServer2k8; Initial Catalog=EmployeeManagement; Uid=sa; pwd=india;"))  
            {  
                using (SqlCommand cmd = new SqlCommand("SELECT * FROM EMPLOYEE WHERE Name like @EMP_Name+'%'", con))  
                {  
                    con.Open();  
                    cmd.Parameters.AddWithValue("@EMP_Name", EMP_Name);  
                    cmd.ExecuteNonQuery();  
                    SqlDataAdapter da = new SqlDataAdapter(cmd);  
                      
                    DataSet ds = new DataSet();  
                    da.Fill(ds);  
                    con.Close();  
                       
                    XmlDataDocument xmldata = new XmlDataDocument(ds);  
                    XmlElement xmlElement = xmldata.DocumentElement;  
                    return xmlElement;  
                }  
            }  
        }  
    }  

حال برای تست وب سرویس، اپلیکیشن خود را اجرا می کنیم و روی نام متد خود کلیک می کنیم:

نتیجه جستجوی ما بر اساس دیتابیس ساخته شده، به شکل زیر خواهد بود:

حال برای استفاده از این وب سرویس، یک Web Application می سازیم.

روی نام پروژه در solution explorer راست کلیک کرده و سپس Add Web Refrence را انتخاب می کنیم.

آدرس وب سرویس خود را وارد کرده و روی کلید GO کلیک می کنیم. سپس روی دکمه Add Refrence کلیک می کنیم.

کد زیر مربوطه به صفحه Default.aspx می باشد.

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_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></title>  
    </head>  
    <body>  
        <form id="form1" runat="server">  
        <div>  
            <table style="border: solid 15px blue; width: 100%; vertical-align: central;">  
                <tr>  
                    <td style="padding-left: 20px; padding-top: 20px; padding-bottom: 20px; background-color: skyblue;  
                        text-align: center; font-family: Verdana; font-size: 20pt; color: red;">  
                        Web Services In ASP.NET C#  
                    </td>  
                </tr>  
                <tr>  
                    <td style="background-color: skyblue; text-align: center; font-family: Verdana; font-size: 14pt;  
                        color: red;">  
                        <b>Enter Employee Name:</b>  
                        <asp:TextBox ID="txtEmpName" runat="server"></asp:TextBox>  
                        <asp:Button ID="btnSearchEmployee" runat="server" Text="Search Employee" OnClick="btnSearchEmployee_Click" />  
                    </td>  
                </tr>  
                <tr>  
                    <td>  
                        <table style="width: 80%; text-align: center; vertical-align: central;">  
                            <tr>  
                                <td style="text-align: left;">  
                                    <asp:GridView ID="GridViewEmployee" runat="server" AutoGenerateColumns="False" Width="100%"  
                                        BackColor="White" BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px"  
                                        CellPadding="4">  
                                        <Columns>  
                                            <asp:BoundField DataField="Name" HeaderText="Employee Name" HeaderStyle-HorizontalAlign="Left">  
                                                <HeaderStyle HorizontalAlign="Left"></HeaderStyle>  
                                            </asp:BoundField>  
                                            <asp:BoundField DataField="Designation" HeaderText="Designation" HeaderStyle-HorizontalAlign="Left">  
                                                <HeaderStyle HorizontalAlign="Left"></HeaderStyle>  
                                            </asp:BoundField>  
                                            <asp:BoundField DataField="City" HeaderText="City" HeaderStyle-HorizontalAlign="Left">  
                                                <HeaderStyle HorizontalAlign="Left"></HeaderStyle>  
                                            </asp:BoundField>  
                                            <asp:BoundField DataField="State" HeaderText="State" HeaderStyle-HorizontalAlign="Left">  
                                                <HeaderStyle HorizontalAlign="Left"></HeaderStyle>  
                                            </asp:BoundField>  
                                            <asp:BoundField DataField="Country" HeaderText="Country" HeaderStyle-HorizontalAlign="Left">  
                                                <HeaderStyle HorizontalAlign="Left"></HeaderStyle>  
                                            </asp:BoundField>  
                                        </Columns>  
                                        <FooterStyle BackColor="#99CCCC" ForeColor="#003399" />  
                                        <HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />  
                                        <PagerStyle ForeColor="#003399" HorizontalAlign="Left" BackColor="#99CCCC" />  
                                        <RowStyle BackColor="White" ForeColor="#003399" />  
                                        <SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />  
                                    </asp:GridView>  
                                </td>  
                            </tr>  
                        </table>  
                    </td>  
                </tr>  
            </table>  
        </div>  
        </form>  
    </body>  
    </html>  

و همچنین کد زیر، مربوط به Default.aspx.cs می باشد:

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Web;  
    using System.Web.UI;  
    using System.Web.UI.WebControls;  
    using System.Data;  
    using System.Xml;  
      
    public partial class _Default : System.Web.UI.Page   
    {  
        protected void Page_Load(object sender, EventArgs e)  
        {  
            if (!IsPostBack)  
            {  
                BindEmployee("");  
            }  
        }  
      
        protected void BindEmployee(string Emp_Name)  
        {  
            localhost.Service obj = new localhost.Service();  
            DataSet ds = new DataSet();  
            XmlElement exElement = obj.GetEmployeeSearchResult(Emp_Name);  
            if (exElement != null)  
            {  
                XmlNodeReader nodeReader = new XmlNodeReader(exElement);  
                ds.ReadXml(nodeReader, XmlReadMode.Auto);  
                GridViewEmployee.DataSource = ds;  
                GridViewEmployee.DataBind();  
            }  
            else  
            {  
                GridViewEmployee.DataSource = null;  
                GridViewEmployee.DataBind();  
            }  
        }  
        protected void btnSearchEmployee_Click(object sender, EventArgs e)  
        {  
            BindEmployee(txtEmpName.Text);  
        }  
    }  

حالا برنامه خود را اجرا می کنیم.

حال یک نام وارد کرده و روی دکمه جستجو کلیک می کنیم.

 

 

 

 

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید