WCF學習之路(一)

      初次據說WCF是人事重構前期,在老師那裏聽到的這個詞,當時對它沒有概念,只知道它屬於一種分佈式的開發框架。如今開始參加ITOO項目,再次接觸到WCF,ITOO框架中包含着WCF,因此必須進行系統學習了。html

      概念:

        WCF,全稱Windows Communication Foundation,是有微軟開發的一系列支持數據通訊的應用程序框架,能夠翻譯爲Windows 通信開發平臺。它是Windows平臺上開發分佈式應用最佳的實踐方式。(來自百度)瀏覽器

      組成部分:安全

        一、網絡服務的協議,即用什麼網絡協議開放客戶端接入。服務器

        二、業務服務的協議,聲明服務提供哪些業務。網絡

        三、數據類型聲明,對客戶端與服務器端通訊的數據部分進行一致化。框架

        四、傳輸安全性的相關定義。分佈式

      契約:學習

        WCF 的基本概念是以契約(Contract) 來定義雙方溝通的協議,合約必需要以接口的方式來體現,而實際的服務代碼必需要由這些合約接口派生並實現。合約分紅了四種:
          數據契約(Data Contract),訂定雙方溝通時的數據格式。
測試

          服務契約(Service Contract),訂定服務的定義。ui

          操做契約(Operation Contract),訂定服務提供的方法。

          消息契約(Message Contract),訂定在通訊期間改寫消息內容的規範。


      上述內容是從百度中找到的關於WCF的一些基本概念,僅有這些概念是不行的,須要在實踐中加深本身的認識和理解,下面經過一個小Demo來加深印象。

      WCFDemo:

      Server端的建立:

        打開vs,選擇Visual C# --> WCF --> WCF服務應用程序,以下圖所示:

       


      解決方案創建以後,程序會默認生成Servic和IService,咱們也能夠自行建立服務,以下:

      


      建好的界面以下所示:

      


      此時咱們的Server端已經建好,Server端的代碼以下:

      IUser:

      

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

namespace WCFServerDemo
{
    // 注意: 使用「重構」菜單上的「重命名」命令,能夠同時更改代碼和配置文件中的接口名「IUser」。

    //下面的兩個契約標籤必須有,使client端在引用時,能夠識別是Server端的接口
    [ServiceContract]  //服務契約
    public interface IUser
    {
        [OperationContract]  //操做契約
        string showName(string name);
    }
}

      User:

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

namespace WCFServerDemo
{
    // 注意: 使用「重構」菜單上的「重命名」命令,能夠同時更改代碼、svc 和配置文件中的類名「User」。
    // 注意: 爲了啓動 WCF 測試客戶端以測試此服務,請在解決方案資源管理器中選擇 User.svc 或 User.svc.cs,而後開始調試。
    public class User : IUser
    {
        //實現顯示名稱的方法
        public string showName(string name)
        {
            return name +":WCF學習";
        }
    }
}

     服務端創建好以後,須要進行發佈,而後才能應用於client端。這裏爲了方便,就不在進行發佈,用另一種方法進行簡單的獲取Server端路徑。郵件選擇「在瀏覽器中查看」:

     

      顯示效果以下:

      

      將上述的紅色框中的地址複製,而後進行建立咱們的client端。


      Client端的建立:

      首先創建一個空的Web應用程序:

      添加服務引用:

      

      效果顯示:

      

      添加完引用以後,再添加一個Web窗體:

      HTML代碼:

       

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

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
        <asp:Button ID="btnShow" runat="server" Text="Button" OnClick="btnShow_Click" />
    </div>
    </form>
</body>
</html>
       實現代碼:

         

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WCFClientDemo.ServiceReference;  //添加引用
namespace WCFClientDemo
{
    public partial class User : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }

        protected void btnShow_Click(object sender, EventArgs e)
        {
            //實例化UserClient,此類是經過添加Server端引用以後產生,主要是跟Server端創建鏈接
            UserClient user = new UserClient();
            //調用Server端方法
            string result = user.showName(this.txtUserName.Text );
            Response.Write(result);
        }
    }
}

      到此服務端和客戶端就建立完成,在運行客戶端以前,必須啓動服務端。最終的顯示效果以下:

      


      小結:

        剛開始接觸WCF時,好多東西都不是特別明瞭,並且一開始傳參時用的是實體,不知道傳實體時還須要用到一些其餘知識,好比數據契約的內容等,出現了好多錯誤。不過,也正是由於這些錯誤,讓本身對WCF的運用機制更加熟悉。這還只是皮毛,還須要在從此的學習中深刻學習WCF的調用過程以及它的做用機制。

相關文章
相關標籤/搜索