共用方式為


位址標頭

位址標頭範例會示範用戶端如何將參考參數傳遞至使用 Windows Communication Foundation (WCF) 的服務。

注意

此範例的安裝程序與建置指示位於本主題的結尾。

WS-Addressing 規格會將端點參考的概念定義成針對特定 Web 服務端點的定址方式。 在 WCF 中,端點參考會使用 EndpointAddress 類別模型化,而 EndpointAddressServiceEndpoint 類別之 [位址] 欄位的類型。

端點參考模型的一部分,是每個參考可以包含一些會新增額外識別資訊的參考參數。 在 WCF 中,這些參考參數會模型化為 AddressHeader 類別的執行個體。

在這個範例中,用戶端會新增用戶端端點之 EndpointAddress 的參考參數。 服務會尋找這個參考參數,然後在其 "Hello" 服務作業的邏輯中使用這個參數的值。

用戶端

對於要傳送參考參數的用戶端,它必須將 AddressHeader 新增至 EndpointAddressServiceEndpoint。 因為 EndpointAddress 類別是不變的,所以必須使用 EndpointAddressBuilder 類別才能修改端點位址。 下列程式碼會初始化用戶端,以便將參考參數當做其訊息部分來傳送。

HelloClient client = new HelloClient();
EndpointAddressBuilder builder =
    new EndpointAddressBuilder(client.Endpoint.Address);
AddressHeader header =
    AddressHeader.CreateAddressHeader(IDName, IDNamespace, "John");
builder.Headers.Add(header);
client.Endpoint.Address = builder.ToEndpointAddress();

這段程式碼會建立以原始 EndpointAddressBuilder 做為初始值的 EndpointAddress。 接下來,它會加入新建的位址標頭;呼叫 CreateAddressHeader 會建立具有特定名稱、命名空間與值的標頭。 此時的值為 "John"。 一旦標頭新增至產生器後,ToEndpointAddress() 方法便會將產生器 (可變的) 轉換回端點位址 (不變的),此位址已指派回該用戶端端點的 [位址] 欄位。

現在,當用戶端呼叫 Console.WriteLine(client.Hello()); 時,服務就能夠取得這個位址參數的值,即顯示於用戶端結果輸出中的值。

Hello, John

伺服器

服務作業 Hello() 的實作會使用目前 OperationContext,檢查傳入訊息上的標頭值。

string id = null;
// look at headers on incoming message
for (int i = 0;
     i < OperationContext.Current.IncomingMessageHeaders.Count;
     ++i)
{
    MessageHeaderInfo h = OperationContext.Current.IncomingMessageHeaders[i];
    // for any reference parameters with the correct name & namespace
    if (h.IsReferenceParameter &&
        h.Name == IDName &&
        h.Namespace == IDNamespace)
    {
        // read the value of that header
        XmlReader xr = OperationContext.Current.IncomingMessageHeaders.GetReaderAtHeader(i);
        id = xr.ReadElementContentAsString();
    }
}
return "Hello, " + id;

這段程式碼會逐一查看傳入訊息上的所有標頭,以便尋找屬於含有特定名稱之參考參數的標頭。 如果有找到該參數,它會讀取參數的值,然後將該值儲存在 "id" 變數中。

若要安裝、建置及執行範例

  1. 確定您已執行 Windows Communication Foundation 範例的一次性安裝程序

  2. 若要建置方案的 C# 或 Visual Basic .NET 版本,請遵循 Building the Windows Communication Foundation Samples中的指示。

  3. 若要在單一或多部電腦組態中執行此範例,請遵循執行 Windows Communication Foundation 範例中的指示進行。