Címfejlécek
A Címfejlécek minta bemutatja, hogy az ügyfelek hogyan adhatnak át referenciaparamétereket egy szolgáltatásnak a Windows Communication Foundation (WCF) használatával.
Feljegyzés
A minta telepítési eljárása és összeállítási utasításai a témakör végén találhatók.
A WS-Addressing specifikáció egy végponthivatkozás fogalmát határozza meg egy adott webszolgáltatás-végpont kezelésére. A WCF-ben a végponthivatkozások az EndpointAddress
osztály használatával modellezhetők – EndpointAddress
az osztály Cím mezőjének ServiceEndpoint
típusa.
A végpont referenciamodelljének része, hogy minden hivatkozás tartalmazhat olyan referenciaparamétereket, amelyek további azonosítási információkat adnak hozzá. A WCF-ben ezek a referenciaparaméterek osztálypéldányokként modellezhetők AddressHeader
.
Ebben a mintában az ügyfél hozzáad egy referenciaparamétert az EndpointAddress
ügyfélvégponthoz. A szolgáltatás ezt a referenciaparamétert keresi, és az értékét a "Hello" szolgáltatásművelet logikájában használja.
Ügyfél
Ahhoz, hogy az ügyfél referenciaparamétert küldjön, hozzá kell adnia egy AddressHeader
elemet a EndpointAddress
ServiceEndpoint
fájlhoz. Mivel az EndpointAddress
osztály nem módosítható, a végpontcím módosítását az EndpointAddressBuilder
osztály használatával kell elvégezni. Az alábbi kód inicializálja az ügyfelet, hogy az üzenet részeként küldjön egy referenciaparamétert.
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();
A kód létrehoz egy EndpointAddressBuilder
eredetit EndpointAddress
kezdeti értékként. Ezután hozzáad egy újonnan létrehozott címfejlécet; a hívás CreateAddressHeader
egy adott névvel, névtérrel és értékkel rendelkező fejlécet hoz létre. Itt az érték "John". Miután hozzáadta a fejlécet a szerkesztőhöz, a ToEndpointAddress()
metódus visszaállítja a (mutable) szerkesztőt egy (nem módosítható) végpontcímké, amelyet az ügyfélvégpont Cím mezőjéhez rendel vissza.
Most, amikor az ügyfél hív Console.WriteLine(client.Hello());
, a szolgáltatás lekérheti ennek a címparaméternek az értékét, amint az az ügyfél eredményében látható.
Hello, John
Kiszolgáló
A szolgáltatásművelet Hello()
megvalósítása az aktuális OperationContext
használatával vizsgálja meg a bejövő üzenet fejléceinek értékeit.
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;
A kód végigterjed a bejövő üzenet összes fejlécén, és olyan fejléceket keres, amelyek hivatkozási paraméterek az adott névvel és. A paraméter megtalálása után beolvassa a paraméter értékét, és az "id" változóban tárolja.
A minta beállítása, összeállítása és futtatása
Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-minták egyszeri beállítási eljárását.
A megoldás C# vagy Visual Basic .NET kiadásának létrehozásához kövesse a Windows Communication Foundation-minták készítéséhez szükséges utasításokat.
Ha a mintát egy vagy több gép közötti konfigurációban szeretné futtatni, kövesse a Windows Communication Foundation-minták futtatásával kapcsolatos utasításokat.