WCF 第二章 契約 雙向操作

2022-05-08 12:33:09 字數 1104 閱讀 2207

請求-回覆通訊是客戶端與服務端最普遍的訊息交換模式。通訊在客戶端被初始化,客戶端傳送乙個請求訊息給服務端,然後服務端傳送乙個返回訊息給客戶 端。如果返回訊息很快,那麼通訊過程可以是同步的,所以客戶端應用程式阻塞等待反饋。如果請求和回覆之間會有延時,請求-回覆模式可以在客戶端使用標 準.net技術實現非同步呼叫。在那種情況下,wcf會在傳送請求給服務端後立即把控制返回給客戶端應用程式。當服務接收到反饋以後,乙個.net**方法 被呼叫來完成wcf回覆。

然而,如果服務端需要初始化訊息,比如乙個通知或者提示?如果客戶端和服務端需要在更高層次互通訊息而不是各自使用獨立訊息,客戶端傳送的大量請求要如何關聯到服務端的回覆?如果乙個請求預期需要10分鐘完成的情況該怎麼辦?

wcf能夠進行雙向通訊通過雙工服務契約。雙工服務契約完成雙工訊息模式,在通訊通道建立以後不可預知的訊息可以從任何方向發出。在雙工通道上的操作可以是請求-回覆模式也可以是單向模式。

因為訊息可以在任何乙個方向傳輸,從客戶端到服務端或者從服務端到客戶端,兩方都需要乙個位址,繫結和契約來定義**,怎麼樣和什麼樣的訊息可以被傳送。 為了讓訊息從服務端傳送到客戶端更加容易,wcf可以需要建立額外的通道。如果初始化通道不支援雙向通訊,那麼wcf建立第二個通道,使用服務終結點定義 的協議,使協議在兩個方向是對稱的。這會在圖2.6中顯示。

依賴於建立客戶端到服務端會話的繫結,wcf將建立乙個或兩個通道來完成雙向通訊模式。對於支援雙向通訊的協議,比如命名管道和tcp,只需要乙個通道。 對於不支援雙向通訊的協議,比如http,wcf會額外再建立乙個通道用來服務端向客戶端返回訊息。在wcf預設的繫結中,那些名字中有"dual"的綁 定(比如 wsdualhttpbinding)實現了兩個通道。自定義繫結,屬於為了滿足特殊需求的通道元素的集合,也可以在通道棧中定義 compositeduplex來實現雙向通道模式。自定義繫結在第四章"繫結"中會詳細介紹。

當從客戶端向服務端傳送訊息時,客戶端使用服務端終結點確定的位址。相反的,當從服務端向客戶端通過對應雙向通道返回訊息時,服務端也必須知道客戶端終結 點位址。客戶端寄宿的位址,wcf生成的終結點由wcf通道產生。這個位址,是訊息從服務端向客戶端返回的傳送的網路位址,可以偶那個過設定客戶端的繫結 的compositeduplex的基位址屬性來過載。

**自出處:

WCF 第二章 契約

在原子和金錢世界中,契約是兩個或多個組織以乙個已知的 提供商品和服務的合同。在位元和服務的世界中,契約有類似的功能 它是兩個或多個組織之間確定訊息交換和訊息條款及條件的合同。契約是由服務終結點傳送或接收的訊息的描述。每乙個終結點都由abcs定義 乙個訊息傳送到的網路上的位址,乙個描述訊息如何傳送的繫...

WCF 第二章 契約 服務契約

服務契約描述了由服務終結點實現的介面操作。服務契約引用訊息格式並描述它們是怎麼被交換的。訊息格式更進一步被資料契約和訊息契約描述。這一部分主要涉及由服務契約實現的訊息交換。wcf在設計時和執行時使用服務契約。在設計階段,它們確定應該在wsdl理暴露為終結點的 的類。乙個使用 servicecontr...

WCF 第二章 契約 資料契約等效

使用集合 集合是.net中非常方便的資料結構,它集中了動態記憶體分配,列舉和列表指向的優勢。儘管很有用,但是沒有xsd或wcf的標準與乙個集合等效。因此,講乙個集合序列化為xml,wcf需要將集合按照陣列對待。事實上,乙個集合的線上級別 序列化與乙個陣列是一致的。另外對集合 型別繼承於icollec...