Intestazioni di indirizzo
Nell'esempio Intestazioni di indirizzo viene illustrato come i client possano passare parametri per riferimento a un servizio usando Windows Communication Foundation (WCF).
Nota
La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine di questo argomento.
La specifica WS-Addressing definisce la nozione di un riferimento dell'endpoint come un modo di indirizzare un particolare endpoint servizio Web. In WCF, i riferimenti all'endpoint vengono modellati utilizzando la classe EndpointAddress
: EndpointAddress
è il tipo del campo Indirizzo della classe ServiceEndpoint
.
Parte del modello di riferimento all'endpoint è che ogni riferimento può portare alcuni parametri per riferimento che aggiungono informazioni di identificazione aggiuntive. In WCF, questi parametri per riferimento vengono modellati come istanze della classe AddressHeader
.
In questo esempio, il client aggiunge un parametro per riferimento a EndpointAddress
dell'endpoint client. Il servizio cerca questo parametro per riferimento e ne usa il valore nella logica dell'operazione del servizio "Hello".
Client
Il client deve aggiungere un AddressHeader
al EndpointAddress
del ServiceEndpoint
per inviare un parametro di riferimento. Poiché la classe EndpointAddress
è immutabile, è necessario modificare l'indirizzo endpoint utilizzando la classe EndpointAddressBuilder
. Nel codice seguente il client viene inizializzato per inviare un parametro di riferimento come parte del messaggio.
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. Viene quindi aggiunta una nuova intestazione di indirizzo. La chiamata a CreateAddressHeader
crea un'intestazione con un nome, uno spazio dei nomi e un valore specifici. In questo esempio il valore è "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.
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.
Hello, John
Server
L'implementazione dell'operazione del servizio Hello()
utilizza il OperationContext
corrente per controllare i valori delle intestazioni nel messaggio in arrivo.
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 di riferimento dotati del nome particolare. Una volta individuato il parametro, il codice legge il valore del parametro e lo archivia nella variabile "id".
Per impostare, compilare ed eseguire l'esempio
Assicurarsi di aver eseguito la Procedura di installazione singola per gli esempi di Windows Communication Foundation.
Per compilare l'edizione in C# o Visual Basic .NET della soluzione, seguire le istruzioni in Building the Windows Communication Foundation Samples.
Per eseguire l'esempio in un solo computer o tra computer diversi, seguire le istruzioni in Esecuzione degli esempi di Windows Communication Foundation.