天天看點

WCF系列之什麼是WCF一、概述二、基于Asp.net 的應用程式開發與面向服務開發三、第一個WCF程式四、場景五、将WCF程式寄宿在B伺服器的IIS之上六、在用戶端[A伺服器]建立服務的引用七、使用WCF服務端的方法

一、概述

Windows Communication Foundation(WCF)是由微軟發展的一組資料通信的應用程式開發接口,可以翻譯為Windows通訊接口,它是.NET架構的一部分。由 .NET Framework 3.0 開始引入。

WCF的最終目标是通過程序或不同的系統、通過本地網絡或是通過Internet收發客戶和服務之間的消息。

WCF合并了Web服務、.net Remoting、消息隊列和Enterprise Services的功能并內建在Visual Studio中。

WCF專門用于面向服務開發。

二、基于Asp.net 的應用程式開發與面向服務開發

WCF系列之什麼是WCF一、概述二、基于Asp.net 的應用程式開發與面向服務開發三、第一個WCF程式四、場景五、将WCF程式寄宿在B伺服器的IIS之上六、在用戶端[A伺服器]建立服務的引用七、使用WCF服務端的方法

在基于Asp.net 的應用程式開發中,我們由客戶機的浏覽器通路應用程式伺服器,然後通過應用程式伺服器中的資料庫連接配接去連接配接資料庫伺服器,讀取或是操作資料,有時候可能會多一個檔案伺服器。大家可以觀察到,基本上所有的應用都放在了一台伺服器上,但對于一個,由于業務上的需要(如:與外部系統互動),一台伺服器很難支援所有的應用。我們再看下面的圖:

WCF系列之什麼是WCF一、概述二、基于Asp.net 的應用程式開發與面向服務開發三、第一個WCF程式四、場景五、将WCF程式寄宿在B伺服器的IIS之上六、在用戶端[A伺服器]建立服務的引用七、使用WCF服務端的方法

客戶機使用浏覽器通路伺服器A,伺服器A為了業務需要與其他各種應用部署在伺服器B、C、D....再通過WCF技術互相通信,互相通路...然而面向服務的好處不僅僅在此,他還提供了不同語言不同作業系統的可互動性..由于本文不是介紹SOA的文章,感興趣的同學可以參見:SOA

三、第一個WCF程式

1. 建立立空白解決方案,并在解決方案中建立項目,項目類型為:WCF服務應用程式。建立完成後如下圖所示:

WCF系列之什麼是WCF一、概述二、基于Asp.net 的應用程式開發與面向服務開發三、第一個WCF程式四、場景五、将WCF程式寄宿在B伺服器的IIS之上六、在用戶端[A伺服器]建立服務的引用七、使用WCF服務端的方法

2.删除系統生成的兩個檔案IService1.cs與Service1.svc。

3.添加自定義的WCF【服務檔案】User.svc,此時vs2010會自動生成WCF接口檔案IUser.cs,我們在IUser中定義WCF方法ShowName,在User.svc.cs對該接口的方法進行實作。

代碼如下:

using System.ServiceModel;

namespace WCFService
{
    [ServiceContract]
    public interface IUser
    {
        [OperationContract]
        string ShowName(string name);
    }
}


namespace WCFService
{
    public class User : IUser
    {
        public string ShowName(string name)
        {
            string wcfName = string.Format("WCF服務,顯示姓名:{0}", name);
            return wcfName;
        }
    }
}      

大家可以看到,在WCF中的接口與普通接口的差別隻在于兩個上下文,其他的和我們正常學習的接口一樣。定義這個上下文要添加System.ServiceModel的引用。

[ServiceContract],來說明接口是一個WCF的接口,如果不加的話,将不能被外部調用。

[OperationContract],來說明該方法是一個WCF接口的方法,不加的話同上。

此時我們的第一個WCF服務程式就建立好了,将User.svc“設為起始頁”,然後F5運作一下試試,如下圖所示,VS2010自動調用了WCF的用戶端測試工具以便我們測試程式:

WCF系列之什麼是WCF一、概述二、基于Asp.net 的應用程式開發與面向服務開發三、第一個WCF程式四、場景五、将WCF程式寄宿在B伺服器的IIS之上六、在用戶端[A伺服器]建立服務的引用七、使用WCF服務端的方法

我們輕按兩下上圖中的 ShowName() 方法,出現如下圖:

WCF系列之什麼是WCF一、概述二、基于Asp.net 的應用程式開發與面向服務開發三、第一個WCF程式四、場景五、将WCF程式寄宿在B伺服器的IIS之上六、在用戶端[A伺服器]建立服務的引用七、使用WCF服務端的方法

在請求視窗中的值中輸入參數“你的姓名”,然後點選“調用”,在響應視窗中會出現傳回值“WCF服務,顯示姓名:你的姓名”,說明測試成功,點選下面的XML也可以看到XML的資料傳輸。我們現在建立好了服務的應用程式和業務邏輯,即非常簡單的列印姓名的方法,測試也成功了。那麼我們怎麼用呢?

四、場景

我們設計的場景是在生産中經常應用的場景,把WCF程式寄宿在IIS之上。假設場景如下:A伺服器和B伺服器。我們把我們剛剛建立的WCF程式“部署”在B伺服器上(本教程的A,B伺服器都放是我自己的一台機器),我們的目标是在A伺服器的應用程式來通路B伺服器的WCF程式,實作伺服器端的應用程式通訊。

五、将WCF程式寄宿在B伺服器的IIS之上

首先我們将WCF應用程式釋出一下,然後部署在B伺服器的IIS之上,如下圖所示:

WCF系列之什麼是WCF一、概述二、基于Asp.net 的應用程式開發與面向服務開發三、第一個WCF程式四、場景五、将WCF程式寄宿在B伺服器的IIS之上六、在用戶端[A伺服器]建立服務的引用七、使用WCF服務端的方法

滑鼠右鍵浏覽Uesr.svc,在遊覽器中出現如下圖所示,說明服務部署成功。

WCF系列之什麼是WCF一、概述二、基于Asp.net 的應用程式開發與面向服務開發三、第一個WCF程式四、場景五、将WCF程式寄宿在B伺服器的IIS之上六、在用戶端[A伺服器]建立服務的引用七、使用WCF服務端的方法

  上圖中的http://localhost/User.svc?wsdl即為我們要引用的服務位址。

六、在用戶端[A伺服器]建立服務的引用

我們這裡以Web應用程式為例,建立地實體位址為本機,但是大家可以想像成B伺服器是遠端計算機,localhost為一個其他的IP位址。

建立解決方案,并且建立ASP.NET Web應用程式的項目。命名為:WCFClient,如下圖所示:

WCF系列之什麼是WCF一、概述二、基于Asp.net 的應用程式開發與面向服務開發三、第一個WCF程式四、場景五、将WCF程式寄宿在B伺服器的IIS之上六、在用戶端[A伺服器]建立服務的引用七、使用WCF服務端的方法

(1)建立Asp.net頁面,命名為:WcfTest.aspx。

(2)添加在第五步中部署的服務的引用。如下圖所示:

WCF系列之什麼是WCF一、概述二、基于Asp.net 的應用程式開發與面向服務開發三、第一個WCF程式四、場景五、将WCF程式寄宿在B伺服器的IIS之上六、在用戶端[A伺服器]建立服務的引用七、使用WCF服務端的方法

此時彈出添加服務引用的窗體,如下圖所示:

WCF系列之什麼是WCF一、概述二、基于Asp.net 的應用程式開發與面向服務開發三、第一個WCF程式四、場景五、将WCF程式寄宿在B伺服器的IIS之上六、在用戶端[A伺服器]建立服務的引用七、使用WCF服務端的方法

我們在位址裡寫上我們寄宿在IIS上的WCF服務的位址服務路徑,此處為:http://localhost/User.svc?wsdl,在名稱空間處填寫WCFService[此名稱空間要在下面的用戶端中引用]然後點選“前往”-->“确定”按鈕。此時我們完成了對服務的引用。我們再次檢視解決方案,裡面多了Service References的檔案夾,通過資料總管打開後裡面多了些檔案,這些檔案用于用戶端向服務端的調用,現在先不用管他。

七、使用WCF服務端的方法

WcfTest.aspx的代碼如下:

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

<!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">
    <asp:TextBox ID="txtName" runat="server"></asp:TextBox><br />
    <asp:Button ID="btnSubmit" runat="server" Text="測試WCF服務" OnClick="btnClick" />
    </form>
</body>
</html>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

//引用WCF服務的名稱空間
using WCFClient.WCFService;

namespace WCFClient
{
    public partial class WCFTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnClick(object sender, EventArgs e)
        {
            UserClient user = new UserClient();
            string result = user.ShowName(this.txtName.Text);
            Response.Write(result);
        }
    }
}      

上面中的UserClient類是在添加引用的時候生成的服務端User類的用戶端代理類,一般用戶端代理類名稱都會是**Client。我們運作一下看下效果。

WCF系列之什麼是WCF一、概述二、基于Asp.net 的應用程式開發與面向服務開發三、第一個WCF程式四、場景五、将WCF程式寄宿在B伺服器的IIS之上六、在用戶端[A伺服器]建立服務的引用七、使用WCF服務端的方法

通過以上的例子,我們完成了由A伺服器的應用向B伺服器中WCF提供的方法的調用。這個例子比較簡單,對于經常開發B/S結構應用程式的同學們來說比較好了解。

八、說明:因為網上的入門教程比較少,本教程隻做入門,後面會繼續講些其他入門的東西,深入的請看園子裡:Artech 大哥的文章。

九、代碼下載下傳:

10 WCF 教程

十、版權

轉載請注明出處:http://www.cnblogs.com/iamlilinfeng

轉載于:https://www.cnblogs.com/cmhunter/p/4240389.html

繼續閱讀