日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

认识Windows Communication Foundation

發布時間:2024/7/19 windows 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 认识Windows Communication Foundation 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??????????? 好久沒有寫博客,作為一個程序員,我居然習慣了不寫博客。也難怪這些年來,一直原地踏步,無所長進。真是一份付出一份收獲,種瓜得瓜,種豆得豆。

Windows Communication Foundation?? 是一種非常實用、非常強大的技術。屬于.NET范疇內的,微軟推出的技術。在這個.NET即將失去市場的日子里,也只有WCF這個技術還有點價值,還可以得到市場的認可。為了提升自己的價值,要好好學習一些實用、值錢的技術。

??????????????????????????????????????????????????????????

Where Is WCF Come From

??????????? wcf是什么?為什么是一項值錢的技術?在開始說明wcf是什么、wcf的價值之前,讓我們先回顧一下早些日子里的個人電腦應用程序是如何工作的,這樣有助于理解,為什么會推出wcf這項技術。在最初的日子里,個人電腦應用軟件都非常匱乏且不可以多個任務同時進行。例如: word processor(文字處理器) 、spreadsheet(電子表格)、database(數據庫)。一般用戶,使用數據庫存儲業務數據,用電子表格分析數據,最后通過文字處理器將這些數據整理做出報表。這些個應用程序之間不能相互通信、交互操作,并且必選安裝在相同的一臺電腦上。隨著網絡的不斷發展,人們對數據共享的要求越來越急迫。例如,在一個公司內的員工,需要共享數據,那么就需要各個應用軟件間互相通信、互相交互,且這些應用軟件可以安裝在不同的電腦上。

??????? 此時,就出現了Inter-Process communication技術(進程間通信)。例如 named pipe、sockets,這些技術的出現,使得應用程序之間可以相互交互、通信、互相發送信息、協同完成任務。但是,這些技術都是非常底層的網絡技術,對開發人員要求極高,大大加強了開發人員的工作量。隨著技術的快速發展,微軟又相繼推出了Component Object Model(COM)、Distributed Component Object Model(DCOM)、COM+、.NET Framework、Remoting 等技術。這些技術,都是為了實現應用程序與組件之間相互通信的。

???? 既然有這么多技術來支持應用程序與組件之間通信,那為什么還需要推出WCF這項技術呢?它又為什么比其他技術更值錢呢?如果我們日常需求只停留在局域網內,各個軟件之間共享數據、發送、接收數據,協同完成任務這個層面,那么以上那些技術已經可以很好的滿足我們的需求了,根本不需要使用WCF這項技術。但是,隨著World wide web的快速發展,出現了web Service這個概念。web service,是指在服務器上執行的應用程序或組件。也就是說,我們使用的應用程序或者服務,不是本地安裝軟件,而是通過World wide web來訪問部署這些應用軟件的服務器,來獲取服務。我們在平日的項目開發中,特別是前臺開發,我們都會經常使用Ajax技術來實現頁面局部刷新,或者通過Ajax調用后臺代碼,完成對數據庫的增刪改查。其實,Ajax就算一種web service經常使用的技術 .web service概念與另一個概念聯系緊密,Service-Oriented Architecture(SOA 面向服務架構). 功能以接口的形式提供給用戶,接口的實現,對用戶透明,用戶不會看到接口的實現,也不需要關注接口的實現。接口的實現,可以使用已有的軟件功能或者其他的web service。面向服務的體系結構,就是分布式服務。

?? 通過以上對web service 與SOA的理解,大家可以看出,其實分布式服務的實質,就是通過網絡與各個應用服務、組件相互接收信息、回復信息、協同合作。這些應用服務、組件可以部署在世界上的任何地方,不在像之前那么,局限在一個公司的局域網中。WCF就是為了創建web service而推出的技術。web service是一種服務,它不依賴于開發語言與部署服務器環境。使用java等其他語言,也可以實現一個web service。

?

The? Benefits Of WCF

?????????? 要想實現應用程序與web service的通信,就要考慮以下幾點:

???? 1.傳輸數據的格式

???? 2.傳輸使用的協議

???? 3.數據安全

???? 以上這些問題,都是需要雙方認同的、需要保持一致的。只有這樣,才可以互相通信。web service使用XML 或者JASON作為數據傳輸的格式。使用Simple Object Access Protocol(SOAP)協議進行相互通信。SOAP協議定義了:

??? 1.SOAP協議消息的格式

?? 2.傳輸數據如何加密

?? 3.怎樣對SOAP消息回復

web service可以發布Web Service Description Language(WSDL)文檔,這個文檔是由XML形式展示的,描述了Web Service可以接收的消息、以及返回的消息結構。客戶端應用程序通過WSDL文檔來決定如何與Web Service進行通信。

以上的這些,WCF會提供一個模型,很方便配置以上內容。

Building WCF Service

? 接下來,我們來動手開發一個WCF服務。要開發的WCF包含兩部分:WCF服務、客戶端應用程序。將開發好的WCF服務部署到IIS上,客戶端應用程序調用服務。

WFC可以基于多種類型的模板開發,例如網站、類庫、工作流等。今天我們使用網站模板來開發WCF服務。

一、? 先創建一個空的解決方案,名稱為TestService.

二、 雙擊解決方案->新增->新網站。 彈出的窗口,選擇WCFService.如下圖:

三、創建WCF Service 后,如下圖:

我將網站起名字為PracticeService, 圖中被紅色圈中的是WCF 服務,TestService是客戶應用程序,待會下面會講到。

在App_Code文件下,會出現兩個類:IService.cs 、Service.cs。我將對應的兩個類改為了:IPracticeService.cs? Practice.cs。

?

Definition Contract

WCF包含,Service Contract(服務契約)、Data Contract(數據契約)、Operation Contract(操作契約)、Member Contract(數據成員契約)。 Service Contract:向外界提供的服務。只有標注為Service Contract 的接口,才能被外界以服務的形式看到。 Operation Contract:接口內的方法,只用被Operation Contract屬性定義后,才可以被外界調用。 Data Contract:只有被Data Contract 屬性定義后的類,才可被WCF序列化、反序列成符合XML Schema(XML架構)的數據流。從客戶端至WCF服務,數據類型一定要符合XML Schema.客戶端發送數據至WCF,先將數據類型系列化成XML流,到達WCF服務端后,WCF將XML數據流,反序列化成.NET對象,反之亦然。由此可見,只要是需要傳輸的類,必須要具有Data Contract.(Data Contract 屬性可以定義在類、結構、枚舉上)。 Data Member:被傳輸的類中字段,需要被Data Member屬性標記,才可以被訪問。 以下是IPracticeService.cs代碼段: using System.Collections.Generic; using System.Runtime.Serialization; using System.ServiceModel; namespace Test { [ServiceContract] public interface IPracticeService { [OperationContract] List<string> GetAllGirl(); [OperationContract] Girl GetSpecificGirl(string Id); // 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 Girl { [DataMember] public string Id { get; set; } [DataMember] public string Name { get; set; } [DataMember] public string Age { get; set; } [DataMember] public string Marry { get; set; } } } 這是一個被Service Contract屬性標記的接口,也是WCF服務提供的服務。接口內的方法,被Operation Contract屬性標記過,才可以被訪問。定義了一個Girl類,使用Data Contract標記,其中字段使用DataMember屬性標記。這個接口提供了一下幾個功能: 1.獲取所有女孩子信息 2.獲取具體某個女孩子信息 ? 令Practice.cs類實現IPractice接口,下面是Practice實現類代碼段: using System.Collections.Generic; // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service" in code, svc and config file together. namespace Test { public class Practice : IPracticeService { public List<string> GetAllGirl() { List<string> collect = new List<string>(); string name = "MARY"; collect.Add(name); name = "CHRISTINE"; collect.Add(name); name = "TINA"; collect.Add(name); name = "CRYSTAL"; collect.Add(name); name = "SUZANNE"; collect.Add(name); name = "BEATRICE"; collect.Add(name); name = "KATIE"; collect.Add(name); return collect; } public Girl GetSpecificGirl(string Id) { Girl girl = new Girl { Age = "22", Name ="SUZANNE", Marry = "Single"}; return girl; } } }

我們只是為了,實現WCF服務與客戶端通信,所以簡單起見,不再寫復雜的數據訪問層代碼,不訪問數據庫,直接hard-code代碼,來實現接口。

值得注意的是,.svc文件(Service.svc)。這個文件指明了,實現了WCF服務類的名稱與位置。特別是在將WCF服務部署到IIS時,IIS需要.svc文件。如下圖:

?

右擊Service.svc,選擇在瀏覽器中查看。看到如下圖信息時,說明成功創建了WCF服務。

點擊上圖中兩個鏈接的任意一個,彈出如下圖頁面:

這個頁面,顯示的是WSDL(Web Service Definition Language)文檔,是由WCF 服務生成的元數據文件,描述了WCF服務的相關信息。客戶端,就是通過WSDL文檔,去與WCF服務通訊。可以把WSDL文檔,看作是商品使用說明書。(WCF 服務,看作是商品)

以上就是我們的PracticeService 服務,它提供了兩個方法,1.獲取所有女孩子信息 2.獲取具體某個女孩子信息。服務開發完了,但是還不能被訪問。因為需要部署到Internet ,才可以被全世界訪問到。接下來,就要部署WCF服務。

?

Deploying WCF Service Into IIS

WCF可以被部署到多種環境中,例如:IIS、 Windows服務、獨立的應用程序等。在這里,以IIS為例。

雙擊PracticeService網站,點擊發布web應用程序,如下圖:

選擇自定義,在彈出頁面,輸入PracticeService作為文件名。

按照下圖序號依次操作。

部署后,打開IIS,應能看到如下圖所示,WCF 服務部署成功。

接下來,就是測試WCF服務了。

?

Building A WCF Client Application

創建一個控制臺程序,TestService.雙擊服務引用,選擇添加服務引用。如下圖:

點擊發現,會看到我們剛才部署的WCF服務。在下面的命名空間,填寫PracticeService.

測試WCF服務,調用WFC服務。

using System; using TestService.PracticeService; namespace TestService { class Program { static void Main(string[] args) { Console.WriteLine("Press ENTER when the service has started"); Console.ReadLine(); PracticeServiceClient proxy = new PracticeServiceClient(); Console.WriteLine("Test 1: List all Gril's name"); string[] grils=proxy.GetAllGirl(); foreach (string girlsName in grils) { Console.WriteLine("Number: {0}", girlsName); } Console.WriteLine(); Console.WriteLine("Test 2: Display the details of a girl"); Girl girl = proxy.GetSpecificGirl("CHRISTINE"); Console.WriteLine("Number: {0}", girl.Name); Console.WriteLine("Age: {0}", girl.Age); Console.WriteLine("marry: {0}", girl.Marry); Console.WriteLine(); } } }

引用服務引用命名空間,using TestService.PracticeService; 該命名空間包含PracticeServiceClient類(proxy),代理類。代理類相當于客戶端到WCF Service之間的翻譯官。代理類使客戶端對WCF服務的訪問,變成類似于對象實例訪問方法的形式。代理類將客戶端對函數的調用轉換成對WCF 服務的訪問。wcf服務返回的消息,被代理類轉換成對函數的調用。

代理類是如何做到這些的呢?當 WCF服務發布后,會生成WSDL文檔,WSDL文檔描述了WCF服務的metadata(元數據)。代理類就是通過WSDL來完成翻譯工作的!

請注意APP.config文件,如下圖:

上圖中Client標簽內的信息,說明了客戶端是如何與WCF Service通信的。在Client的標簽內的endpoint(終結點)標簽,說明了WCF service的詳細信息。其中包括:

address(地址):web service服務部署的地址,以便客戶端去訪問。

binding(綁定):主要包含web service通信相關的信息,例如傳輸機制、傳輸協議等。binding支持多種傳輸協議,默認使用BasicHttpBinding,使用http協議通信。

contract(契約):說明web service提供的服務。

?

WCF AND The Principles of? SOA

到此,我們已經使用WCF開發了一個webservice服務,只要知道部署webservice服務的地址,世界上任何一臺計算機,都可以使用它。我們前面講到了,SOA(Service-Oriented? Architecture 面向服務的架構)。SOA的原理,就是將軟件功能以服務的形式放在internet上,客戶不需要知道實現服務的細節,只要明白這個服務是做什么的,知道服務所在地址,就可以。就像我們知道一張圖片的地址,我們就可以去訪問它。每個服務都是一個小web service,客戶端使用服務,訪問web service.因為與web service的訪問與網絡協議,傳輸協議等有關,與客戶端程序用何種語言開發無關。所以,web service可以被不同語言開發的客戶端程序通信。

WCF是一個實現SOA程序的平臺,使用WCF可以快速開發SOA程序。

?

轉載于:https://www.cnblogs.com/VitoCorleone/p/9240654.html

總結

以上是生活随笔為你收集整理的认识Windows Communication Foundation的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。