茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1682793 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00213.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

Dot Net? : [轉貼]何謂 Windows Communication Foundation

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]何謂 Windows Communication Foundation

何謂 Windows Communication Foundation

.NET Framework (current version)

發行︰ 2016年5月

Windows Communication Foundation (WCF) 是用於建置服務導向應用程式的架構。 使用 WCF,您可以在各個服務端點之間傳送非同步訊息形式的資料。 服務端點可能是由 IIS 裝載之持續上線服務的一部分,或為應用程式中裝載的服務。 端點則大致是某項服務的用戶端,會向該服務端點要求資料。 訊息可為簡單的單一字元或以 XML 傳送的字組,乃至如二進位資料的資料流這般複雜的形式都沒問題。 其中幾個範例案例包括:

  • 處理商務交易的安全服務。


  • 提供當前資料給其他使用者的服務,例如流量報表或其他監控服務。

  • 讓兩人可相互即時通訊或交換資料的聊天交談服務。

  • 輪詢一項或多項服務以取得資料,再按邏輯呈現簡報資料的儀表板應用程式。

  • 使用 Windows Workflow Foundation 實作且公開為 WCF 服務的工作流程。

  • 輪詢服務以取得最新資料摘要的 Silverlight 應用程式。

儘管在 WCF 面市之前,原本就能建立這幾類應用程式,但 WCF 使得端點開發比以往更為容易。 簡言之,WCF 的設計提供了便於管理的方式以讓您建立 Web 服務與 Web 服務用戶端。

WCF 的功能


WCF 包括下列功能集。 如需詳細資訊,請參閱 WCF 功能詳細資料.

  • 服務導向

    WCF 採用 WS 標準的結果,代表您可以建立「 服務導向」(Service Oriented) 應用程式。 服務導向架構 (SOA) 是 Web 服務賴以傳送和接收資料的基礎。 服務具備鬆散耦合的普遍優點,而非隨應用程式而異的硬式編碼。 鬆散耦合的關係意味著在任何平台建立的任何用戶端,只要遵守基本合約便能連線至任何服務。


  • 互通性

    WCF 實作了 Web 服務互通性的最新業界標準。 如需詳細資訊受支援標準的詳細資訊,請參閱 互通性與整合

  • 多種訊息模式

    訊息將以數種模式的其中一種進行交換。 最常見的模式為要求/回覆模式,即某端點向另一端點要求資料, 然後由該另一端點予以回覆。 其他模式還包括單向訊息,則是僅由單一端點傳送訊息,但從不期待會收到回覆。
    更複雜的模式為雙工交換模式,其中會由兩個端點建立連線,並相互往返傳送資料,類似立即訊息程式。
    如需詳細資訊如何使用 WCF 來實作各種訊息交換模式的詳細資訊,請參閱 合約

  • 服務中繼資料

    WCF 支援採用業界標準 (如 WSDL、XML 結構描述及 WS-Policy) 指定的格式來發行服務中繼資料。 這份中繼資料可用於自動產生和設定將要存取 WCF 服務的用戶端。 您可以透過 HTTP 及 HTTPS,或者使用 Web 服務中繼資料交換標準來發行中繼資料。 如需詳細資訊,請參閱 中繼資料.

  • 資料合約

    由於 WCF 是使用 .NET Framework 所建置,其亦包含了便利的程式碼方法,以讓您提供希望強制履行的合約。 其中一種通用的合約類型就是資料合約。 基本上,當您使用 Visual C# 或 Visual Basic 撰寫服務程式碼時,處理資料最簡單的做法,就是建立類別,以屬於資料實體的屬性來表示資料實體。 WCF 包含完善的系統,能以如此簡便的方式來處理資料。 一旦表示資料的類別已建立,您的服務便會自動產生中繼資料,而讓用戶端能夠遵照您所設計的資料型別。 如需詳細資訊,請參閱 使用資料合約


  • 安全性

    訊息經過加密後可以保護隱私權,而您也可以要求使用者必須先驗證才能接收訊息。 使用諸如 SSL 或 WS-SecureConversation 等公認的標準即可實作安全性。 如需詳細資訊,請參閱 Windows Communication Foundation 安全性.

  • 多重傳輸與編碼

    訊息可以透過數種內建傳輸通訊協定與編碼的任何方式進行傳送。 最常用的通訊協定與編碼方式為傳送文字編碼的 SOAP 訊息,其所使用的是全球資訊網泛用的超文字傳輸通訊協定 (HTTP)。
    或者,WCF 也能讓您透過 TCP、具名管道或 MSMQ 傳送訊息。
    這些訊息可編碼為文字,或採用最佳化的二進位格式。 使用 MTOM 標準將能有效傳送二進位資料。 如果所提供的傳輸或編碼都無法滿足您的需求,您還可以建立自己的自訂傳輸或編碼。 如需詳細資訊WCF 支援的傳輸與編碼的詳細資訊,請參閱 Windows Communication Foundation 中的傳輸

  • 可靠的佇列訊息

    WCF 使用透過 WS-Reliable 傳訊來實作的可靠工作階段以及 MSMQ,來支援可靠的訊息交換。
    如需詳細資訊WCF 中可靠及佇列訊息支援的詳細資訊,請參閱 佇列和可靠的工作階段

  • 永久性的訊息

    永久性的訊息是指不會因為通訊中斷而遺失的訊息。 處於永久性訊息模式的訊息一律儲存至資料庫。 萬一發生中斷,資料庫可以讓您在恢復連線後繼續進行訊息交換。 您也能夠使用 Windows Workflow Foundation (WF) 建立永久性的訊息。 如需詳細資訊,請參閱 工作流程服務.


  • 異動

    WCF 還支援使用三種交易模型中的任一種進行交易:WS-AtomicTtransaction、 System.Transactions 命名空間中的應用程式開發介面,以及 Microsoft 分散式交易協調器。 如需詳細資訊WCF 中支援交易的詳細資訊,請參閱 WCF 的異動

  • AJAX 與 REST 支援

    REST 是 Web 2.0 技術演進的一個範例。 WCF 可設定成用來處理未包裝在 SOAP Envelope 中的「純」XML 資料。
    WCF 也可以擴充,以支援特定的 XML 格式,例如 ATOM (常用的 RSS 標準),甚至是非 XML 格式,例如 JavaScript Object Notation (JSON)。

  • 擴充性

    WCF 架構具有若干擴充點。 如果需要額外的功能,有數個進入點可讓您自訂服務的行為。 如需詳細資訊可用擴充點的詳細資訊,請參閱 延伸 WCF

WCF 與其他 Microsoft 技術的整合

WCF 是具有靈活彈性的平台。
由於提供了極大彈性,許多其他 Microsoft 產品也使用 WCF。
了解 WCF 的基本概念後,您在使用任何這些產品時就能立即掌握優勢。

第一項與 WCF 搭檔的技術為 Windows Workflow Foundation (WF)。 工作流程會將其步驟封裝在工作流程中成為活動,藉以簡化應用程式開發。 若是使用第一版的 Windows Workflow Foundation,開發人員則必須為工作流程建立主應用程式。 下一版的 Windows Workflow Foundation 已與 WCF 相整合。 如此可讓任何工作流程輕鬆地裝載在 WCF 服務中,您只要自動選擇 WF/WCF (Visual Studio 2012 中的專案類型) 即可。

Microsoft BizTalk Server R2 同樣使用 WCF 做為通訊技術。
BizTalk 是設計用來接收標準化格式的資料以及轉換成其他格式。 訊息必須傳遞至中央訊息槽,以在該處使用嚴格對應或利用 BizTalk 功能 (例如工作流程引擎) 才可轉換訊息。 BizTalk 如今已可使用 WCF 企業營運 (LOB) 配接器將訊息傳遞至訊息槽。

Microsoft Silverlight 為可供建立高互通性多樣化 Web 應用程式的平台,能讓開發人員建立媒體播放 (例如串流視訊) 頻繁的網站。 Silverlight 從 2 版起已納入 WCF 做為通訊技術,將 Silverlight 應用程式連接至 WCF 端點。

Windows Server AppFabric 的裝載功能 應用程式伺服器是用於部署與管理使用 WCF 進行通訊的應用程式而特別建立的。 裝載功能 包含了專為 WCF 已啟用的應用程式而設計之豐富的工具及組態選項。



原文出處: 何謂 Windows Communication Foundation
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]何謂 Windows Communication Foundation?

何謂 Windows Communication Foundation?

Visual Studio 2008

Web 服務包括應用程式對應用程式通訊的標準通訊協定,不僅廣為接受,更改變了軟體的發展。例如,Web 服務現在提供的功能包括安全性、分散式交易協調和可靠的通訊。Web 服務改變所帶來的優勢應反映在開發人員使用的工具和技術。Windows Communication Foundation (WCF) 是針對為分散式運算、廣泛的互通性和直接的服務導向支援提供可管理的方法而設計。

WCF 透過全新的服務導向程式設計模型,簡化所連接應用程式的開發。WCF 以提供分層架構的方式支援分散式應用程式開發的多種樣式。WCF 通道架構在其基底上提供非同步、無類型的訊息傳遞基本。建置在此基底最上方的通訊協定設備可用來進行安全、可靠、交易的資料交換,也可選用多個傳輸與編碼選項的通訊協定機能。

具有類型的程式設計模型 (稱為「 服務模型」(Service Model)) 是針對簡化分散式應用程式的開發而設計,並提供 ASP.NET Web 服務、.NET Framework 遠端處理和企業服務中的專業知識給開發人員,以及以類似的開發經驗跨入 WCF 領域的人員。服務模型具有直接對應 Web 服務與 .NET Framework Common Language Runtime (CLR) 的概念的功能,包括將訊息彈性且延伸對應至 Visual C# 或 Visual Basic 等語言中的服務實作。它提供了啟用鬆散結合與版本控制的序列化設備,可與現有 .NET Framework 分散式系統技術 (例如 Message Queuing (MSMQ)、COM+、ASP.NET Web 服務、Web 服務加強 (WSE) 和其他多種功能等) 整合且互通。

問題範例


以下範例說明 WCF 能解決的部分問題。租車公司決定建立用於預約車輛的新應用程式。此預約租車應用程式的建立者知道該應用程式實作的商務邏輯必須可由在公司內部與外部執行的其他軟體存取。因此,他們決定以服務導向的樣式加以建置,並透過一組定義良好的服務,對其他軟體公開應用程式的邏輯。為了要實作這些服務,並藉此與其他軟體通訊,新的應用程式將使用 WCF。

在其整個存留期中,可能會有很多其他應用程式存取預約租車應用程式。設計時,預約租車應用程式的設計人員知道該應用程式的商務邏輯將由先前所示的三種其他軟體存取:

  • 供企業的客服中心員工使用,且在 Windows 桌上型電腦上執行的客服中心應用程式。此應用程式是針對新的預約系統所建立,並使用 Microsoft .NET Framework 和 WCF 建置。此應用程式與新的預約租車應用程式並非完全不同,因為其唯一的目的是做為新系統的用戶端。從服務導向的觀點來看,它只是預約系統的商務邏輯的另一個用戶端。
  • 現有的預約應用程式建置在執行於非 Windows 系統中的 J2EE 伺服器上。由於最近購併了其他租車公司,因此現有系統必須能存取新的應用程式邏輯,以便提供統一的體驗給所購併公司的客戶。
  • 合作夥伴應用程式在多個平台上執行,每個平台都位於與租車公司有商務往來的公司內。合作夥伴可能包括旅行社、航空公司,以及其他有預約租車需求的公司。

新預約租車應用程式的各種通訊需求一點也不簡單。例如,對於與客服中心互動的應用程式來說,效能十分重要,而互通性應明確易懂,因為兩者都建置在 .NET Framework 上。但對於和現有 J2EE 型預約應用程式與各種合作夥伴應用程式的通訊而言,互通性則是最高目標。安全性規定也大不相同,會隨著本機的 Windows 應用程式、在其他作業系統上執行的 J2EE 型應用程式和網際網路上的多種合作夥伴應用程式而改變。即使是交易式需求也可能僅隨著允許提出交易式要求的內部應用程式而改變。如何在不對無法管理的複雜性公開新應用程式建立者的情況下,滿足這些多樣化的商務與技術需求?


WCF 是針對此多樣化但真實的案例所設計,而且是公開和存取服務的 Windows 應用程式的預設技術。本主題介紹 WCF,檢查它所提供項目並顯示如何使用。透過此簡介,剛描述的案例將做為範例。如此做的目的是為了釐清 WCF 是什麼,顯示它解決的問題,並說明它如何解決那些問題。

處理問題

新的 Windows 應用程式的基礎是 .NET Framework。因此,WCF 主要會做為一組類別,實作在 .NET Framework CLR 最上方。由於它會擴充其類似環境,因此 WCF 讓使用 .NET Framework 建立服務導向應用程式的開發人員也能以類似方式建置服務導向應用程式。

圖示顯示 WCF 用戶端和服務的畫面。這兩個項目使用以 WCF 原生訊息表示的 SOAP 進行互動,所以即使圖示顯示雙方都建置在 WCF 上,它並不是必要的項目。WCF 建置在 .NET Framework 2.0 上。

如之前的建議所述,WCF 會處理通訊應用程式的各類型挑戰。但是,以下為 WCF 最重要的三個方面:

  • 整合現有的 .NET Framework 通訊技術。
  • 支援跨銷售商的互通性,包括可靠性、安全性和交易。
  • 明確的服務導向。

整合 Microsoft 分散式運算技術

由於缺少 WCF,實作租車應用程式的開發團隊必須由 .NET Framework 提供的多種選擇中選擇正確的分散式技術。但由於此應用程式有多種需求,沒有單一技術可以符合其需求。此外,應用程式可能使用多種現有 .NET Framework 技術,如下所示:

  • ASP.NET Web 服務 (ASMX):與現有的 J2EE 預約應用程式及合作夥伴應用程式透過網際網路通訊的選項。由於現在大部分平台都支援基本的 Web 服務,因此這是在發行 WCF 之前達到跨廠商互動性的最直接方式。

  • .NET Framework 遠端處理:與客服中心應用程式通訊的選項,因為這兩者都建置在 .NET Framework 上。遠端處理是明確針對緊密結合的 .NET 對 .NET 通訊所設計,因此它可對本機網路中的應用程式提供流暢且直接的開發體驗。
  • 企業服務:由預約租車應用程式用於管理物件存留期和定義分散式交易。在此案例中,這些功能可用來與其他應用程式通訊和整合,但企業服務僅支援有限的通訊選項。
  • WSE:可以搭配 ASMX 使用,以便和 J2EE 預約應用程式與合作夥伴應用程式進行通訊。由於 WSE 實作最新定義的 Web 服務協定 (統稱為 WS-* 規格),因此它允許更具彈性的 Web 服務安全性,只要所有相關應用程式支援這些新規格的相容版本即可。
  • Microsoft Message Queuing (MSMQ):用來與需要保證資料傳道與取消結合工作負載與應用程式存留期的 Windows 合作夥伴應用程式進行通訊。訊息佇列提供的永久性訊息通常是間歇連線應用程式的最佳解決方案。

建置在 .NET Framework 上的預約租車應用程式必須使用這些通訊技術的其中多項技術,以符合需求。雖然這在技術上可行,但最後的應用在實作上會很複雜,而且在維護上是一大挑戰。

透過 WCF,方案的實作可望大幅簡化。如圖所示,WCF 可用於之前描述的所有情況。因此,預約租車應用程式可以將此項技術應用在該應用程式內所有應用程式對應用程式的通訊中。以下顯示 WCF 如何滿足這些需求:

  • 由於 WCF 可以使用 Web 服務通訊,因此可與其他支援 SOAP 的平台 (例如領導性 J2EE 型應用程式伺服器) 直接互通。
  • 您也可以設定和擴充 WCF,以便使用不以 SOAP 為基礎 (例如 RSS 的簡易 XML 格式) 的訊息和 Web 服務通訊。
  • 效能是大多數企業的最大考量。WCF 的開發目標,便是要成為 Microsoft 所開發的分散式應用程式平台中,最快速的分散式應用程式平台。如需有關 WCF 和其他 Microsoft .NET 分散式通訊技術之間的高階效能比較資訊,請參閱
    http://go.microsoft.com/fwlink/?LinkId=94274 (本頁面可能為英文)。
  • 當通訊中的雙方都建置在 WCF 上時,為了要提供最佳效能,使用於此類情況的 Wire 編碼會是 XML 資訊集的最佳二進位版本。訊息仍會符合 SOAP 訊息的資料結構,但它們的編碼會使用二位元的資料結構,而非 XML 1.0 文字編碼的標準角括弧和文字格式。使用此選項與客服中心用戶端應用程式通訊十分合理,因為它也建置在 WCF 上,而且效能也是一個重要的考量。
  • 管理物件存留期、定義分散式交易和企業服務的其他方面現在由 WCF 提供。它們可以供任何 WCF 應用程式使用,這表示預約租車應用程式可以使用它們搭配與其通訊的任一個其他應用程式。
  • 由於它支援一組大型的 WS-* 規格,因此在與其他支援這些規格的任何平台通訊時,WCF 可協助提供可靠性、安全性和交易。
  • 用於佇列訊息的 WCF 選項建置在訊息佇列上,允許應用程式在不使用另一組應用程式程式設計介面的情況下使用持續性佇列。

這項整合帶來了更佳的功能,並大幅降低了複雜性。

與使用其他技術建置的應用程式的互通性

WCF 為分散式應用程式推出了新開發環境,在設計上可與非 WCF 應用程式之間具有良好的交互操作能力。WCF 在互通性上有兩大重點:與其他平台的互通性,以及與早於 WCF 的 Microsoft 技術之互通性。下列章節會分別說明這兩方面。

與其他 Web 服務平台的互通性

現今企業所擁有的系統和應用程式通常是向多家不同供應商購買而來。舉例來說,在租車應用程式中,便需要與使用不同語言撰寫,並在不同作業系統上執行的各種軟體應用程式進行通訊。

由於 WCF 的基本通訊機制是以 SOAP 為基礎的 Web 服務,因此以 WCF 為基礎的應用程式可以與多種內容下執行的軟體進行通訊。建置在 WCF 上的應用程式可以與下列所有應用程式互動:

  • 在相同 Windows 電腦上的不同處理序中執行的 WCF 應用程式。
  • 在另一台 Windows 電腦上執行的 WCF 應用程式。
  • 以支援標準 Web 服務的其他技術 (例如 J2EE 應用程式伺服器) 建置的應用程式。這些應用程式可以在執行 Windows 作業系統或其他作業系統的電腦上執行。

為了在基本通訊之外提供更多功能,WCF 實作由 WS-* 規格定義的 Web 服務技術。這些規格原本全都是由 Microsoft、IBM 和其他合作的廠商所定義。由於規格變得穩定,因此擁有權常會傳遞給標準組織,例如全球資訊網協會 (W3C) 或美國先進結構化資訊標準組織 (OASIS)。這些規格規範了眾多領域,包含基本訊息、安全性、可靠性、交易,以及與服務的中繼資料搭配使用。如需詳細資訊,請參閱 互通性與整合。如需 進階 Web 服務規格的詳細資訊,請參閱 (本頁面可能為英文)。

以功能區分群組,這些規格的涵蓋範圍包括:

  • 訊息:SOAP 是 Web 服務的基礎,定義了包含標頭和內文部分的基本封套。WS-Addressing 定義了用來處理 SOAP 訊息的 SOAP 標頭增加部分,使 SOAP 可以攜帶定址資訊,不用依賴如 HTTP 等基本傳輸通訊協定。訊息傳輸最佳化機制 (MTOM) 會透過以 XML 二進位最佳化套件 (XOP) 規格為基礎的大量二進位資料內容,定義 SOAP 訊息的最佳化傳輸格式。
  • 中繼資料:Web 服務描述語言 (WSDL) 針對指定服務與如何使用服務的各個方面定義了標準語言。WS-Policy 指定更多無法在 WSDL 中表示的服務行為動態方面,例如偏好的安全性選項。WS-MetadataExchange 允許用戶端使用 SOAP 直接要求與服務有關的描述資訊 (例如其 WSDL 和其原則)。

  • 安全性:WS-Security、WS-SecureConversation、WS-Trust 和 WS-Federation 全都定義 SOAP 的增加部分,以提供驗證、資料完整性、資料保密性和其他安全功能。
  • 可靠性:WS-Reliable 訊息定義允許可靠端對端通訊的 SOAP 標頭之增加部分,即使必須周遊一個或多個 Web 服務媒介。
  • 交易:建置於 WS-Coordination 上的 WS-Atomic 交易允許在 Web 服務對話的內容中協調兩階段認可交易。

預約租車應用程式可能會使用這些先進技術中的多種技術。例如,透過 HTTP 以外的傳輸機制使用 SOAP 時,WS-Addressing 便顯得十分重要,而這往往是與.NET Framework客服中心用戶端應用程式通訊的情況。WCF 需要使用 WS-Policy 和 WS-Metadata Exchange 來確認正在與其通訊的系統是否也使用 WCF,並發現其他項目。可靠的通訊在大部分情況下都很重要,因此在此案例中,可能會使用 WS-Reliable 訊息來與其他多個應用程式互動。同樣的,您也可以使用 WS-Security 和相關說明保護與一或多個應用程式通訊的安全性,因為所有應用程式都需要一定程度的保護,以避免遭到未經授權的存取或訊息修改和攔截。對需要與預約租車系統進行交易整合的應用程式而言,WS-Atomic 交易十分重要。最後,在需要二進位資料 (例如用於車隊的例圖) 的最佳 Wire 格式時,便可使用 MTOM,而且兩邊的通訊都支援此選項。

關鍵在於 WCF 會實作具備跨平台安全性、可靠性、交易和其他服務的互通 Web 服務。若要提供最大輸送量,可大幅最佳化 WCF 對 WCF 通訊,但所有其他通訊則會使用標準 Web 服務通訊協定。實際上,單一應用程式可以對兩種用戶端公開其服務。

與 Microsoft 技術的互通性


很多 Microsoft 客戶已對 WCF 中的 .NET Framework 技術做出重大投資。保護這些投資是 WCF 設計人員的基本目標。安裝 WCF 不會破壞現有的技術,因此組織在使用時不需要變更現有的應用程式。WCF 提供明確的升級途徑,而且盡可能地與較早的技術交互操作。

例如,WCF 和 ASMX 都使用 SOAP,因此 WCF 應用程式可以直接和以 ASMX 建置的應用程式交互操作。現有的企業服務應用程式也可以包含於 WCF 介面中,使這些服務可以與建置在 WCF 上的應用程式交互操作。由於 WCF 中的持續性佇列需仰賴 MSMQ,因此 WCF 應用程式可以直接與使用原始 MSMQ 介面建立但不屬於 WCF 應用程式者交互操作。在預約租車應用程式中,使用這些較早技術建立的軟體可以直接連線並使用新系統中的 WCF 服務。

但互通性並非永遠可行。例如,WSE 1.0 和 WSE 2.0 實作的其中一些 WS-* 規格和 WCF 相同,但這些較舊的技術實作較舊版本的規格。3.0 版的 WSE 允許與 WCF 互通性,但舊版本不允許。如需有關互動性的詳細資訊,請參閱 從 WSE 3.0 Web 服務移轉至 WCF

與其他 XML 通訊協定的互通性

網際網路的未來是無法預測的,而現在使用的技術可能會有所演進或遭到取代。現在,在建立以 Web 為主的應用程式 (統稱為「Web 2.0」) 上有一個普遍的趨勢,就是以通訊為基礎的應用程式模型僅使用非 SOAP 型的簡易 XML 格式,並且需要仰賴 HTTP 做為傳輸和應用程式通訊協定。例如,代表性狀態傳輸 (REST) 架構樣式沒有用於處理資料的使用者定義操作觀念。反之,應用程式狀態會與 HTTP URL 和 HTTP 方法 (例如 PUT、POST、DELETE 和 GET) 關聯。這個方法跟在企業環境中建立多數開發人員熟悉的使用者定義程序或功能形成強烈對比。但 REST 方法在服務必須做為 Web 2.0 應用程式後端的案例中仍有其價值。


REST 只是 Web 2.0 技術演進的其中一個範例。在實驗性程式設計模型和標準不斷重新解譯與精進的環境中,需要以彈性因應無法預見的變化。WCF 彈性非常高。例如,當 WCF 使用 SOAP 做為基本結構時,它不一定會使用 SOAP 進行 Wire 通訊。事實上,WCF 可以設定為處理沒有 SOAP 封套包裝的「純文字」XML 資料。WCF 也可進行擴充,以支援特定的 XML 格式,例如 ATOM (一種常見的 RSS 標準),甚至還能支援非 XML 格式,例如 JavaScript 物件標記法 (JSON)。這種彈性可確保現在撰寫的程式碼在將來仍然有效,即使通訊協定已經改變或遭到取代。因此,WCF 是針對現在與未來的需要所設計。

請參閱



原文出處:何謂 Windows Communication Foundation?
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]無廢話 WCF 入門教程一[什麼是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


  在基於Asp.net 的應用程序開發中,我們由客戶機的瀏覽器訪問應用程序服務器,然後通過應用程序服務器中的數據庫連接去連接數據庫服務器,讀取或是操作數據,有時候可能會多一個文件服務器。大家可以觀察到,基本上所有的應用都放在了一台服務器上,但對於一個,由於業務上的需要(如:與外部系統交互),一台服務器很難支持所有的應用。我們再看下面的圖:

wcf

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

三、第一個WCF程序

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


wcf

  2.刪除系統生成的兩個文件IService1.cs與Service1.svc。

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

代碼如下:


 1 using System.ServiceModel;
2
3 namespace WCFService
4 {
5 [ServiceContract]
6 public interface IUser
7 {
8 [OperationContract]
9 string ShowName(string name);
10 }
11 }
12
13
14 namespace WCFService
15 {
16 public class User : IUser
17 {
18 public string ShowName(string name)
19 {
20 string wcfName = string.Format("WCF服務,顯示姓名:{0}", name);
21 return wcfName;
22 }
23 }
24 }

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

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

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

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

  我們雙擊上圖中的 ShowName() 方法,出現如下圖:


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

四、場景

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

五、將WCF程序寄宿在B服務器的IIS之上

  首先我們將WCF應用程序發佈一下,然後部署在B服務器的IIS之上,如下圖所示:

 

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


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

六、在客戶端[A服務器]創建服務的引用

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

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

 

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


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

wcf

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

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


 、使用WCF服務端的方法

  WcfTest.aspx的代碼如下:


 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WCFTest.aspx.cs" Inherits="WCFClient.WCFTest" %>
2
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml">
5 <head runat="server">
6 <title></title>
7 </head>
8 <body>
9 <form id="form1" runat="server">
10 <asp:TextBox ID="txtName" runat="server"></asp:TextBox><br />
11 <asp:Button ID="btnSubmit" runat="server" Text="測試WCF服務" OnClick="btnClick" />
12 </form>
13 </body>
14 </html>
15
16 using System;
17 using System.Collections.Generic;
18 using System.Linq;
19 using System.Web;
20 using System.Web.UI;
21 using System.Web.UI.WebControls;
22
23 //引用WCF服務的名稱空間
24 using WCFClient.WCFService;
25
26 namespace WCFClient
27 {
28 public partial class WCFTest : System.Web.UI.Page
29 {
30 protected void Page_Load(object sender, EventArgs e)
31 {
32
33 }
34
35 protected void btnClick(object sender, EventArgs e)
36 {
37 UserClient user = new UserClient();
38 string result = user.ShowName(this.txtName.Text);
39 Response.Write(result);
40 }
41 }
42 }

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

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

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

九、代碼下載:

   10 WCF 教程

十、版權


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


原文出處:无废话WCF入门教程一[什么是WCF] - 李林峰的园子 - 博客园
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]WCF 簡易教學

WCF 簡易教學

公司希望有 WCF當中介程式,隔離資料庫,這對習慣 Web API的我們,有點對 WCF生疏,所以寫了些簡單的教學,一方面怕自己有點生疏,另一方面給有需要的朋友們,減少學習的時間。
一、 建立介面的宣告
在介面函式上輸入關鍵字『 OperationContract』,這樣端點的服務
能搜尋到此宣告的函式,另外如果需要宣告物件時,該類別要宣告關鍵字『 DataContract』,類別的屬性宣告『 DataMember

 [ ServiceContract ]
    public interface IService1
    {
        [ OperationContract ]
        IEnumerable < tempCalendar > readGoogleData( int intStartIkey, int intEndIkey);

        [ OperationContract ]
        bool writeGoogleData( tempCalendar updateData);
    }

[ DataContract ]
    public class tempCalendar
    {
        [ DataMember ]
        public int ikey
        {
            get
;
            set ;
        }
        [ DataMember ]
        public string sendParameter
        {
            get ;
            set ;
        }     
    }
二、
 
實作介面的類別

用E ntitySQLlinq語法去讀取資料庫的資料和寫入資料庫的資料,直接
回傳 IEnumerable型別,就因為取回的資料只是用來查詢, 會有較佳的執行速度
public class Service1 : IService1
    {
        GoogleEntities
googleEntityObj = new GoogleEntities ();
        public IEnumerable < tempCalendar > readGoogleData( int intStartIkey, int intEndIkey)
        {
                IEnumerable < tempCalendar > tempCalendarList = from c in googleEntityObj.Calendar
                     Where  c.ikey >= intStartIkey && c.ikey <= intEndIkey
                                       select new tempCalendar
                                          {
                                             ikey=c.ikey,

                                              sendParameter=c. 上傳參數
                                          };
                return tempCalendarList;
        }

        public
bool writeGoogleData( tempCalendar updateData)
        {
                var original = googleEntityObj.Calendar.Find(updateData.ikey);
                original. 上傳完成 = updateData.isSendGoogleOK;
                original. 結果訊息 = updateData.sendMessage;;

                googleEntityObj.SaveChanges();
                return true ;
        }
    }
三、   設定 web.config
   <
system.serviceModel >
    < bindings >
      < basicHttpBinding >
<!-- 預設允許大量傳輸 -->
        < binding name =
cusBinding maxBufferSize = 64000000 maxReceivedMessageSize = 64000000    />
      </ basicHttpBinding >
    </ bindings >
    < client >
<!-- 連線端口設為
basicHttpBinding 具名管線,   -->
      < endpoint binding = basicHttpBinding bindingConfiguration = cusBinding contract = WcfService1.IService1 />
    </ client >
    < services >
      < service name = WcfService1.Service1 >
        < endpoint address = binding = basicHttpBinding bindingConfiguration = cusBinding contract = WcfService1.IService1 />

      </ service >
    </ services >
    < behaviors >
      < serviceBehaviors >
        < behavior name = >
          < serviceMetadata httpGetEnabled = true httpsGetEnabled = true />

          < serviceDebug includeExceptionDetailInFaults = false />
<!-- 預設連線數允許到 100 -->
          < serviceThrottling maxConcurrentCalls = 100 maxConcurrentSessions = 50
maxConcurrentInstances = 50 />
        </ behavior >
      </ serviceBehaviors >
    </ behaviors >
    < protocolMapping >
      < add binding = basicHttpsBinding scheme = https />
    </ protocolMapping >

    < serviceHostingEnvironment aspNetCompatibilityEnabled = true multipleSiteBindingsEnabled = true />
  </ system.serviceModel >
四、   如何呼叫 service

先透過 vs2012tool視窗,執行 svcutil.exe  service.svc的位址,自
動產生檔案到 c:\programe(X86)\ Microsoft Visual Studio 12.0, 2個檔案加入到呼叫 service的程式專案
















以下示範如何呼叫服務
  public IEnumerable < tempCalendar > serviceReadGoogleData( int intStartIkey, int intEndIkey)
        {
            try
            {
               
BasicHttpBinding myBinding = new BasicHttpBinding ();
                EndpointAddress myEndpoint = new EndpointAddress ( );
                ChannelFactory < IService1 > myChannelFactory = new ChannelFactory < IService1 >(myBinding, myEndpoint);
                IService1 wcfClient1 = myChannelFactory.CreateChannel();

               return wcfClient1.readGoogleData(intStartIkey, intEndIkey);
            }
            catch ( Exception ex)
            {
                throw new Exception (ex.Message);
            }
        }
五、
 
設定 web協定

服務的介面要改成 GETPOST等協定,可以依自己的習慣修改網址的傳遞
參數的模式

IService.svc
    [ OperationContract ]
    [ WebInvoke (Method = , UriTemplate = , RequestFormat =
WebMessageFormat .Json, ResponseFormat = WebMessageFormat .Json, BodyStyle = WebMessageBodyStyle .WrappedRequest)]
    bool writeToGoogleCalendar( string orgIkey);

Service.svc.cs
public bool writeToGoogleCalendar( string orgIkey)
        {
            return true ;
        }


修改 Web.config
< system.serviceModel >
    < bindings >
    </ bindings >
    < client >
      < endpoint binding = webHttpBinding
bindingConfiguration = contract = WcfService1.IService1 />
    </ client >
    < services >
      < service name = WcfService1.Service1 >
        < endpoint address = behaviorConfiguration = webBehavior binding = webHttpBinding
          bindingConfiguration = contract = WcfService1.IService1 />
      </ service >
    </ services >
    < behaviors >
      < endpointBehaviors >
        < behavior name = webBehavior >

          < webHttp />
        </ behavior >
      </ endpointBehaviors >
      < serviceBehaviors >
        < behavior name = >
          < serviceMetadata httpGetEnabled = true httpsGetEnabled = true />
          < serviceDebug includeExceptionDetailInFaults = false />
          < serviceThrottling maxConcurrentCalls = 100 maxConcurrentSessions = 50
            maxConcurrentInstances = 50 />
        </ behavior >
      </
serviceBehaviors >
    </ behaviors >


呼叫 WCF網址 :




六、   參考文獻


原文出處: 技術事件薄: WCF 簡易教學
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]WCF 教學

WCF教學


原文出處: 米米貓學開發: WCF教學
前一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|