WCF,即Windows Communication Foundation,是一個面向服務編程的綜合分層架構,具有跨平台、安全、可信賴、事務性等特點。。它可以被看作是Asmx、.Net Remoting、Enterprise Service、WSE、MSMQ等技術的並集。
說明:面向服務(SO)是一組原則的抽象,是建立面向服務應用程式的最佳實務。軟體工程的現有經曆可以稱為--面向過程—>物件導向—>面向組件—>面向服務。面向服務是具有技術無關性的,就是說我(用戶端)應當不瞭解你具體使用了哪種技術實現的服務端,或者你的服務端的位置。服務只需要公開自己的邏輯操作給用戶端,告訴用戶端我可以做什麼,你應該如何和我打交道,其他所有的一切都隱藏在服務邊界裡,公開的資訊則應該是類型無關的,服務邊界就像小時候座位裡的“三八線”,區分開了服務端和用戶端,但是和“三八線”不同的是,服務邊界還需要給兩邊傳遞訊息。
WCF分為以下重要因素組成:服務、終結點、訊息、託管、中繼資料交換。
服務與地址、綁定及契約有關。其中地址定義了服務的位置,綁定定義了服務通訊的方式,契約則定義了服務的內容。WCF用終結點表示這樣的一種組成關係,終結點就是地址、契約與綁定的混合體。每個終結點包括3個元素,而宿主則負責公開終結點。邏輯上將,終結點相當於服務的介面。
每個服務必須至少公開一個業務終結點,每個終結點有且只能有一個服務契約。服務的所有終結點都包含唯一的地址,一個單獨的服務可以公開多個終結點,這些終結點可以使用相同或不同的綁定,公開相同或者不同的契約。每個服務提供的不同終結點之間是沒有任何關係的。
終結點是用來發送和接受訊息的構造。
WCF的絕大多方法都在System.ServiceModel命名空間下。
服務合約是使用ServiceContractAttribute來標記的類或者介面。
服務作業是在方法上使用OperationContractAttribute屬性進行標記。
參數和傳回值-每個服務作業都有一個傳回值和一個參數,即使它們為void。可以使用局部方法將對對象的引用,從一個對象傳遞到另外一個對象,但與局部方法不同的是,服務作業不會傳遞對對象的引用,它們傳遞的只是對象的副本。參數或傳回值中使用的每個類型都必須是可序列化的(必須能夠轉換為位元組流,並能夠從位元組流轉換成為對象)。
服務作業的訊息模式:請求/應答、單向、雙工。
- 請求/應答:
用戶端將接受與請求相關的回覆。這個是預設模式,他可以支援傳入也可以支援返回。這種從操作的結果是:除非用戶端非同步呼叫操作,否則用戶端將停止處理,知道收到返回訊息,即使該訊息正常情況下為空白時也是如此。
缺點是容易造成用戶端假死,
- 單向:
用戶端不必等待操作完成,並且不理會SOAP的錯誤,則該操作可以指定單向訊息模式。除非用戶端發送資料極大,則用戶端幾乎可以立刻進行下一步操作。
設定OperationContract(IsOneWay=True)
- 雙工:
無論使用單向訊息發送,還是請求/應當訊息發送,服務和用戶端均可以獨立的向對方發送訊息。對於必須直接與用戶端通訊或者向訊息交換的任意一方提供非同步體驗(類似事件的行為)的服務來說,這種形式非常有用。
若要設計雙向合約,則必須設計回調寫定,並將該回調協定的類型分配給標記服務寫定的ServiceContractAttribute的CallbackContract屬性。
若要實現雙工模式,必須建立第二個介面,這個介面包含在用戶端調用的方法聲明。