Binding 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
包含繫結項目,這些項目會指定用於用戶端與服務之通訊的通訊協定、傳輸和訊息編碼器。
public ref class Binding abstract : System::ServiceModel::IDefaultCommunicationTimeouts
public abstract class Binding : System.ServiceModel.IDefaultCommunicationTimeouts
type Binding = class
interface IDefaultCommunicationTimeouts
Public MustInherit Class Binding
Implements IDefaultCommunicationTimeouts
- 繼承
-
Binding
- 衍生
- 實作
範例
BasicHttpBinding binding = new BasicHttpBinding();
binding.Name = "binding1";
Uri baseAddress = new Uri("http://localhost:8000/servicemodelsamples/service");
Uri address = new Uri("http://localhost:8000/servicemodelsamples/service/calc");
// Create a ServiceHost for the CalculatorService type and provide the base address.
using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress))
{
serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, address);
// Open the ServiceHostBase to create listeners and start listening for messages.
serviceHost.Open();
// The service can now be accessed.
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
// Close the ServiceHostBase to shutdown the service.
serviceHost.Close();
}
備註
表示繫結項目的集合,集合中的每個繫結項目會分別描述端點如何與其他端點進行通訊,也就是一直在用戶端的通道處理站和服務的通道接聽程式 (Listener) 內建置端點。 繫結包含繫結項目的集合,這些項目會對應至通訊協定通道、傳輸通道和訊息編碼器。 通訊協定通道的繫結項目可以是任意數目,但是每一個傳輸和訊息編碼器只能有一個繫結項目。 通常在繫結中,會有六層的繫結項目。 只需要堆疊底部的傳輸和編碼繫結項目。 由於每個系結都需要編碼,如果未指定編碼,Windows Communication Foundation (WCF) 會為您新增預設編碼。 預設為 Text/XML (適用於 HTTP 和 HTTPS 傳輸) 和 Binary (適用於其他傳輸)。
下表摘要列出每一層的選項。
層 | 選項。 | 必要 |
---|---|---|
異動流程 | TransactionFlowBindingElement | 否 |
可靠性 | ReliableSessionBindingElement | 否 |
安全性 | 對稱、不對稱、傳輸層級 | 否 |
形狀變更 | CompositeDuplexBindingElement | 否 |
傳輸升級 | SSL 資料流、Windows 資料流、對等解析程式 | 否 |
編碼 | 文字、二進位、MTOM、自訂 | 是 |
傳輸 | TCP、具名管道、HTTP、HTTPS、MSMQ、自訂 | 是 |
每一個繫結項目都會提供規格,以便在用戶端上建立通道處理站,並在服務上建立通道接聽程式。 例如,當建構通道處理站堆疊時,繫結中每一個繫結項目只會在堆疊中擁有一個通道處理站。 相同類型的對應適用於服務上堆疊中的通道接聽程式。 用戶端和服務上的一致性對於在這些端點之間建立通道型的連線非常重要。 然後,每一個處理站和接聽程式都會處理通道堆疊中與其連接之對應通道的傳送和接受作業,然後這些通道就可以傳送和接收用於通訊的訊息。
Binding 的每一個執行個體都有 Name 和 Namespace,這兩者放在一起時可在服務的中繼資料 (Metadata) 內唯一識別此執行個體。 如果未指定任何名稱或命名空間,WCF 會為您新增預設值。 預設名稱為 null
,而預設命名空間為 http://tempuri.org/
。 繫結的這個使用者名稱與通訊協定名稱的規格不同,後者是由 Scheme 屬性所指定。 例如,如果您要新增更多 HTTP 繫結,您可以任意命名,並將其所有配置設定為 "http"。 沒有任何原有應用程式或機器分派是根據 Scheme。 因此,您可以避開無法為已知通訊協定註冊其他處理常式的常見問題。 您也可以輕鬆地並存使用多個版本的繫結,只需要為每一個版本提供不同的名稱即可。
Binding 類別會實作 IDefaultCommunicationTimeouts 介面來減少阻斷服務 (DOS) 攻擊情形,這類攻擊會長時間佔用資源。 此實作會指定通訊逾時值來開啟和關閉連接,並用於讀取和寫入與接收和傳送訊息有關的作業。 用來取得及設定這些逾時值和其預設值之屬性的作業摘要列於下表中。
Timeout 屬性 | 預設值 |
---|---|
OpenTimeout | 1 分鐘 |
CloseTimeout | 1 分鐘 |
SendTimeout | 1 分鐘 |
ReceiveTimeout | 10 分鐘 |
當您從 Binding 繼承來建立繫結時,必須覆寫 CreateBindingElements。
此外,您也可以定義自己的繫結項目,並將其插入上表定義的任何層次之間。 如需詳細資訊,請參閱 CustomBinding 類別。
建構函式
Binding() |
使用預設的名稱和命名空間,初始化 Binding 類別的新執行個體。 |
Binding(String, String) |
從服務之指定的繫結,初始化 Binding 類別的新執行個體。 |
屬性
CloseTimeout |
取得或設定針對連線所提供的時間間隔 (此連線要在傳輸引發例外狀況之前關閉)。 |
MessageVersion |
取得用戶端所使用的訊息版本及使用繫結所設定的服務。 |
Name |
取得或設定繫結的名稱。 |
Namespace |
取得或設定繫結的 XML 命名空間。 |
OpenTimeout |
取得或設定針對連線所提供的時間間隔 (此連線要在傳輸引發例外狀況之前開啟)。 |
ReceiveTimeout |
取得或設定連線中斷之前,可以維持非作用狀態的時間間隔 (在此期間未接收應用程式訊息)。 |
Scheme |
在衍生類別中實作時,會設定 URI 配置,此配置可指定繫結所建置之通道和接聽程式處理站所使用的傳輸。 |
SendTimeout |
取得或設定針對寫入作業所提供的時間間隔 (此作業要在傳輸引發例外狀況之前完成)。 |