共用方式為


可外掛式通訊協定簡介

Microsoft .NET Framework 提供 Internet 服務的有層次、可擴充和 Managed 實作 (Implementation),可以迅速而簡易地整合到您的應用程式。System.NetSystem.Net.Sockets 命名空間 (Namespace) 中的 Internet 存取類別可以被用來實作 Web 架構和 Internet 架構兩種應用程式。

Internet 應用程式

Internet 應用程式大致可以分類為兩個種類,要求資訊的用戶端應用程式和回應用戶端資訊要求的伺服器應用程式。一般 Internet 主從架構應用程式為全球資訊網 (World Wide Web),人們使用瀏覽器存取儲存在世界各地 Web 伺服器上的文件和其他資料。

應用程式不只限於這些角色的其中之一;例如,常見的中介層 (Middle Tier) 應用程式伺服器會向另一個伺服器要求資料來回應用戶端的要求,它在這裡同時扮演伺服器和用戶端。

用戶端應用程式藉著辨識要用於要求和回應之要求的網際網路資源和通訊的通訊協定,來產生要求。若有必要,用戶端也提供完成要求所需的任何額外資料,例如 Proxy 位置或驗證 (Authentication) 資訊 (使用者名稱、密碼等等)。一旦要求形成,要求即可傳送至伺服器。

辨識資源

.NET Framework 使用 Uniform Resource Identifier (URI) 來辨識要求的網際網路資源和通訊協定。URI 含有至少三個 (也可能是四個) 片段:配置識別碼,辨識要求和回應的通訊協定;伺服器識別碼,包含網域名稱系統 (DNS) 主機名稱,或是在 Internet 上唯一識別伺服器的 TCP 位址;路徑識別碼,在伺服器上找出要求的資訊;和選擇性 (Optional) 查詢字串,將用戶端的資訊傳遞至伺服器。例如,URI「https://www.contoso.com/whatsnew.aspx?date=today」由配置識別碼「http」、伺服器識別碼「www.contoso.com」、路徑「/whatsnew.aspx」和查詢字串「?date=today」組成。

一旦伺服器已經接收要求並處理回應,它會將回應傳回至用戶端應用程式。回應包括補充資訊,例如內容的類型 (例如,未經處理文字或 XML 資料)。

.NET Framework 中的要求和回應

.NET Framework 使用特定類別來透過要求/回應模型存取 Internet 資源所需的三項資訊:Uri 類別,包含您正在尋找的 Internet 資源之 URI;WebRequest 類別,含有資源的要求;以及 WebResponse 類別,提供內送回應的容器。

用戶端應用程式藉由傳遞網路資源的 URI 至 WebRequest.Create 方法,建立 WebRequest 執行個體 (Instance)。這個靜態 (Static) 方法建立特定通訊協定 (例如 HTTP) 的 WebRequest。傳回的 WebRequest 提供屬性的存取,同時控制對伺服器的要求和對資料流 (在要求產生時所送出的) 的存取。WebRequest 上的 GetResponse 方法從用戶端應用程式傳送要求至 URI 中所辨識的伺服器。在回應可能延遲的情況中,可以使用 WebRequest 上的 BeginGetResponse 方法,非同步產生要求,而回應則可以事後使用 EndGetResponse 方法來傳回。

GetResponseEndGetResponse 方法會傳回 WebResponse,提供您存取由伺服器傳回的資料。因為這個資料藉著 GetResponseStream 方法提供給要求中的應用程式當做資料流,它可用於應用程式中任何使用資料流的地方。

WebRequestWebResponse 類別是可外掛式通訊協定的基礎 - 網路服務的實作允許您開發使用網際網路資源的應用程式,而不需操心於各個資源所使用通訊協定的特定詳細資訊。WebRequest 的子代 (Descendant) 類別要向 WebRequest 類別註冊,以管理實際連接至網際網路資源的詳細資訊。

就範例來說,HttpWebRequest 類別管理使用 HTTP 連接網際網路資源的詳細資訊。根據預設,當 WebRequest.Create 方法遇到開頭為「http:」或「https:」的 URI (HTTP 和安全 HTTP 的通訊協定識別項) 時,傳回的 WebRequest 可以直接使用,或是將它型別轉換為 HttpWebRequest 來存取特定通訊協定的屬性。大部份的情形中,WebRequest 提供產生要求的所有必要資訊。

可表示為要求/回應異動的任何通訊協定都可以使用於 WebRequest。您可以從 WebRequestWebResponse 衍生通訊協定特定的類別,並接著以靜態 WebRequest.RegisterPrefix 方法註冊它們,以供應用程式使用。

當需要 Internet 要求的用戶端授權時,WebRequestCredentials 屬性將提供必要的憑證。這些憑證可以是基本 HTTP 或摘要驗證的簡單名稱/密碼配對,或者 NTLM 或 Kerberos 驗證的名稱/密碼/網域集合。在 NetworkCredentials 執行個體中可以儲存一個憑證集合,而 CredentialCache 執行個體則可以同時儲存多個集合。CredentialCache 使用要求的 URI 和伺服器所支援的驗證配置,判斷哪一個憑證要傳送至伺服器。

WebClient 的簡單要求

對於需要向網際網路資源產生簡單要求的應用程式,WebClient 類別提供通用的方法以對 Internet 伺服器上載資料或下載資料。WebClient 依賴 WebRequest 類別提供對網際網路資源的存取;因此,WebClient 類別可以使用任何已註冊的可外掛式通訊協定。

對於不能使用要求/回應模型的應用程式,或需要在網路上聆聽並傳送要求的應用程式,System.Net.Sockets 命名空間提供 TCPClientTCPListenerUDPClient 類別。這些類別處理使用不同的傳輸通訊協定以產生連接的詳細資訊,並公開網路連接至應用程式做為資料流。

熟悉 Windows 通訊端介面的開發人員,或是那些需要由通訊端層級程式設計提供控制項的人會發現 System.Net.Sockets 類別符合他們的需要。System.Net.Sockets 類別是 System.Net 類別內,從 Managed 至機器碼的轉換點。大部份的情形中,System.Net.Sockets 類別封送處理資料至它們的 Windows 32 位元對應部份,而且處理任何必要的安全性檢查。

請參閱

設計可外掛式通訊協定程式 | 存取網際網路