ایجاد و استفاده از وب سرویس WCF در ASP.NET

دوشنبه 4 آبان 1394

WCFبه توسعه‌دهندگان این امکان را می‌دهد تا راهکارهایی امن با قابلیت اطمینان و برپایه‌ی تراکنش تولید کنند که قابلیت استفاده بر روی پلت‌فرم‌های مختلف را داشته باشند. با استفاده از WCF می توانیم داده‌ها را بصورت ناهمگام (asynchronous) از یک endpoint به endpoint دیگری ارسال کنید. نرم افزار Visual studio از سرویس های WCF پشتیبانی می کند، بنابراین ساخت سرویس WCF آسان می شود. در این آموزش ما یک سرویس WCF را با استفاه از Visual Studio 2012 ایجاد می کنیم.

ایجاد و استفاده از وب سرویس WCF در ASP.NET

نرم افزار Visual Studio 2012 را باز کرده و File=>Project را انتخاب کنید. در قسمت New Project گزینه WCF را انتخاب کرده و بعد آن  WCF Service Application را کلیک کنید، در آخر نامی مثل WCFService برای آن انتخاب کنید، مانند تصویر زیر:

بعد از گذراندن مراحل بالا visual studio یک Solution Explorer مانند شکل زیر ایجاد می کند.

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

 در صورت تمایل میتوانید به صورت رایگان آموزش WCF به همراه پروژه عملی را در سایت تاپ لرن مشاهده کنید .

اول؛ باید یک قرارداد سرویس ایجاد کنید.

دوم؛ همچنین باید یک قرارداد داده ایجاد کنید.

حالا، نام فایل های IService1.cs را به IAddService.cs و Service1.svc را به AddService.svc تغییر دهید، سپس تمام کدها را پاک کرده و کد زیر را در فایل کلاس IAddService.cs اضافه کنید.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace WcfService
{
        // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
        [ServiceContract]
        public interface IAddService
        {

               [OperationContract]
               int Add(int a, int b);
               // TODO: Add your service operations here
        }


        // Use a data contract as illustrated in the sample below to add composite types to service operations.
        [DataContract]
        public class CompositeType
        {
               [DataMember]
               public int a { get; set; }

               [DataMember]
               public int b { get; set; }
        }
}

توجه: اگر شما فایل Service1.svc را تغییر نام دهید، همچنین باید منبع سرویس را نیز مانند شکل زیر تغییر دهید.

برای تغییر منبع(reference)، فایل AddService.svc را با استفاده از ویرایشگر منبع باز کنید.

حالا کد زیر را در فایل کلاس AddService.svc.cs اضافه کنید.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace WcfService
{
       // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
       // NOTE: In order to launch WCF Test Client for testing this service, please select Service1.svc or Service1.svc.cs at the Solution Explorer and start debugging.
       public class AddService : IAddService
       {
             public int Add(int a, int b)
             {
                     return a + b;
             }
       }
}

در اینجا می توانید در فایل  IAddService.cs class ببینید که ما یک واسط IAddService ایجاد کرده ایم و یک متد اضافه را وارد کردیم که مقدار int برمی گرداند. ما همچنین کلاس DataContract را اضافه کردیم

CompositeType برای نوع عد صحیح DataMember با b  و a اضافه شده است.

پیکربندی یک سرویس WCF

بعد از ایجاد یک سرویس، مرحله بعدی پیکربندی سرویس است. پیکربندی سرویسهای WCF شامل تعریف (ABC(Address,Binding,Contract سرویس ها می باشد. حالا مراحل زیر را برای پیکربندی سرویس WCF انجام دهید.

فایل referenceرا باز کنید و کد نشان داده شده در زیر را برای تعریف نقطه های پایانی(endpoints) اضافه کنید.

<system.serviceModel>
    <services>
       <service behaviorConfiguration="ServiceBehaviour" name="WcfService.AddService">
           <endpoint address="" binding="wsHttpBinding" contract="WcfService.IAddService">
              <identity>
                <dns value="localhost" />
              </identity>
           </endpoint>
           <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
       </service>
    </services>
    <behaviors>
       <serviceBehaviors>
            <behavior name="ServiceBehaviour">
                 <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
                 <serviceMetadata httpGetEnabled="true"/>
                 <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
                 <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
       </serviceBehaviors>
    </behaviors>
    <protocolMapping>
       <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
 </system.serviceModel>

حالا با کلید F5 برنامه را اجرا کنید و خروجی مانند زیر می شود:

ساخت کلاینت های WCF

بعد از ایجاد سرویس WCF، شما می توانید از سرویس WCF در یک برنامه وب استفاده کنید. برای استفاده از سرویس WCF، باید یک کلاینت WCF بسازید.

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

نرم افزار Visual Studio را باز کرده و یک وب سایت خالی ASP.NET ایجاد کنید. حالا، منبع(reference) سرویس WCF را توسط راست کلیک کردن بر روی نام  پروژه در  Solution Explorer اضافه کنید و گزینه  Add Service Reference را از منو context انتخاب کنید، مانند زیر:

حالا، آدرس سرویس را وارد کرده و یا بر روی دکمه Discover کلیک کنید. اگر سرویس در حالت اجرا باشد ضمیمه نخواهد شد. لیستی از سرویس ها زیر پنجره (قاب) service به نظر می رسد، مانند زیر:

نام فضای نام را در جعبه متن Namespace وارد کنید و بر روی OK کلیلک کنید. منبع (reference) در پروژه اضافه شده است.

حالا، یک وب فرم جدید به پروژه اضافه کرده و کد زیر را در صفحه WebForm1.aspx وارد کنید.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
  <head runat="server">
      <title>Using WCF Service</title>
  </head>
  <body>
      <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="txt_a" runat="server"></asp:TextBox>
            <span> + </span>
            <asp:TextBox ID="txt_b" runat="server"></asp:TextBox>
            <asp:Button ID="btn_add" runat="server" Text="Add" OnClick="btn_add_Click" />
        </div>
        <div>
            <asp:Label ID="lbl_result" runat="server"></asp:Label>
        </div>
      </form>
  </body>
</html>

در اینجا دو کنترل Textbox برای ورودی و یک برچسب برای خروجی و یک دکمه برای فراخوانی سرویس اضافه کرده ایم.

حالا کد زیر را روی رویداد کلیک دکمه در فایل code-behind صفحه WebForm1.aspx اضافه کنید.

protected void btn_add_Click(object sender, EventArgs e)
{
    AddService.AddServiceClient client = new AddService.AddServiceClient();
    int a = Convert.ToInt32(txt_a.Text);
    int b = Convert.ToInt32(txt_b.Text);
    lbl_result.Text = "Result: " + client.Add(a, b);
    client.Close();
}

برنامه را اجرا کنید، مقادیر خود را در دو Textbox وارد کرده و دکمه Add را کلیک کنید. خروجی به صورت زیر خواهد بود:

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

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

نویسنده 3355 مقاله در برنامه نویسان
  • WCF
  • 6k بازدید
  • 7 تشکر

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

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