Intestazioni di indirizzoAddress Headers

Nell'esempio delle intestazioni di indirizzo viene illustrato come i client possano passare parametri per riferimento a un servizio utilizzando Windows Communication Foundation (WCF).The Address Headers sample demonstrates how clients can pass reference parameters to a service using Windows Communication Foundation (WCF).

Nota

La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine di questo argomento.The setup procedure and build instructions for this sample are located at the end of this topic.

La specifica WS-Addressing definisce la nozione di un riferimento dell'endpoint come un modo di indirizzare un particolare endpoint servizio Web.The WS-Addressing specification defines the notion of an endpoint reference as a way to address a particular Web service endpoint. In WCF, i riferimenti all'endpoint vengono modellati utilizzando la EndpointAddress class - EndpointAddress è il tipo di campo dell'indirizzo di ServiceEndpoint (classe).In WCF, endpoint references are modeled using the EndpointAddress class - EndpointAddress is the type of the Address field of the ServiceEndpoint class.

Parte del modello di riferimento all'endpoint è che ogni riferimento può portare alcuni parametri per riferimento che aggiungono informazioni di identificazione aggiuntive.Part of the endpoint reference model is that each reference can carry some reference parameters that add extra identifying information. In WCF, questi parametri per riferimento vengono modellati come istanze di AddressHeader classe.In WCF, these reference parameters are modeled as instances of AddressHeader class.

In questo esempio, il client aggiunge un parametro di riferimento a EndpointAddress dell'endpoint client.In this sample, the client adds a reference parameter to the EndpointAddress of the client endpoint. Il servizio cerca questo parametro per riferimento e ne usa il valore nella logica dell'operazione del servizio "Hello".The service looks for this reference parameter and uses its value in the logic of its "Hello" service operation.

ClientClient

Il client deve aggiungere un AddressHeader al EndpointAddress del ServiceEndpoint per inviare un parametro di riferimento.For the client to send a reference parameter, it must add an AddressHeader to the EndpointAddress of the ServiceEndpoint. Poiché la classe EndpointAddress è immutabile, è necessario modificare l'indirizzo endpoint utilizzando la classe EndpointAddressBuilder.Because the EndpointAddress class is immutable, modification of an endpoint address must be done using the EndpointAddressBuilder class. Nel codice seguente il client viene inizializzato per inviare un parametro di riferimento come parte del messaggio.The following code initializes the client to send a reference parameter as part of its message.

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();  

Il codice crea un EndpointAddressBuilder utilizzando il EndpointAddress originale come valore iniziale.The code creates an EndpointAddressBuilder using the original EndpointAddress as an initial value. Viene quindi aggiunta una nuova intestazione di indirizzo. La chiamata a CreateAddressHeadercreates crea un'intestazione con un nome, uno spazio dei nomi e un valore specifici.It then adds a newly created address header; the call to CreateAddressHeadercreates a header with a particular name, namespace, and value. In questo esempio il valore è "John."Here the value is "John". Una volta aggiunta l'intestazione al generatore, il metodo ToEndpointAddress() converte nuovamente il generatore (mutevole) in un indirizzo endpoint (immutabile), il quale viene assegnato di nuovo al campo Indirizzo dell'endpoint client.Once the header is added to the builder, the ToEndpointAddress() method converts the (mutable) builder back into an (immutable) endpoint address, which is assigned back to the client endpoint's Address field.

Quando il client chiama Console.WriteLine(client.Hello());, il servizio è in grado di ottenere il valore di questo parametro di indirizzo, come si può vedere nell'output risultante del client.Now when the client calls Console.WriteLine(client.Hello());, the service is able to get the value of this address parameter, as seen in the resulting output of the client.

Hello, John

ServerServer

L'implementazione dell'operazione del servizio Hello() utilizza il OperationContext corrente per controllare i valori delle intestazioni nel messaggio in arrivo.The implementation of the service operation Hello() uses the current OperationContext to inspect the values of the headers on the incoming message.

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;  

Il codice scorre tutte le intestazioni nel messaggio in arrivo, cercando intestazioni che sono parametri per riferimento dotati del nome particolare.The code iterates over all the headers on the incoming message, looking for headers that are reference parameters with the particular name and. Una volta individuato il parametro, il codice legge il valore del parametro e lo archivia nella variabile "id".When the parameter is found, it reads the value of the parameter and stores it in the "id" variable.

Per impostare, compilare ed eseguire l'esempioTo set up, build, and run the sample

  1. Assicurarsi di avere eseguito la procedura di installazione singola per gli esempi di Windows Communication Foundation.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Per compilare l'edizione in C# o Visual Basic .NET della soluzione, seguire le istruzioni in Building the Windows Communication Foundation Samples.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  3. Per eseguire l'esempio in una configurazione singola o tra computer, seguire le istruzioni in esegue gli esempi di Windows Communication Foundation.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your machine. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Client\AddressHeaders

Vedere ancheSee Also