位址標頭
位址標頭範例會示範用戶端如何將參考參數傳遞至使用 Windows Communication Foundation (WCF) 的服務。
注意: |
---|
此範例的安裝程序與建置指示位於本主題的結尾。 |
WS-Addressing 規格會將端點參考的概念定義成針對特定 Web 服務端點的定址方式。在 WCF 中,端點參考會使用 EndpointAddress
類別模型化,而 EndpointAddress
是 ServiceEndpoint
類別之 [位址] 欄位的類型。
端點參考模型的一部分,是每個參考可以包含一些會新增額外識別資訊的參考參數。在 WCF 中,這些參考參數會模型化為 AddressHeader
類別的執行個體。
在這個範例中,用戶端會新增用戶端端點之 EndpointAddress
的參考參數。服務會尋找這個參考參數,然後在其 "Hello" 服務作業的邏輯中使用這個參數的值。
用戶端
對於要傳送參考參數的用戶端,它必須將 AddressHeader
新增至 ServiceEndpoint
的 EndpointAddress
。因為 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();
這段程式碼會建立以原始 EndpointAddress
做為初始值的 EndpointAddressBuilder
。接下來,它會加入新建的位址標頭;呼叫具有特定名稱、命名空間與值的 CreateAddressHeadercreates
標頭。此時的值為 "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" 變數中。
若要設定、建置及執行範例
若要建置方案的 C# 或 Visual Basic .NET 版本,請遵循建置 Windows Communication Foundation 範例中的指示。
若要在單一或跨電腦的組態中執行本範例,請遵循執行 Windows Communication Foundation 範例中的指示。
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.