Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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.
Megjegyzé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 EndpointAddressServiceEndpointfá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-t, az eredeti EndpointAddress kezdeti értékként történő felhasználásával. 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
Szerver
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égigmegy a bejövő üzenet összes fejlécén, keresve azokat a fejléceket, amelyek az adott nevű hivatkozási paraméterekhez tartoznak. A paraméter megtalálása után beolvassa a paraméter értékét, és az "id" változóban tárolja.
A példa beállítása, elkészítése és futtatása
Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-minták One-Time 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 Windows Communication Foundation-mintákcímű témakör utasításait.
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ásacímű témakör utasításait.