Megosztás a következőn keresztül:


Kérelemkörnyezet

Ez RequestContext egy Orleans olyan funkció, amely lehetővé teszi az alkalmazás metaadatainak, például a nyomkövetési azonosítóknak a kérésekkel való áramlását. Az alkalmazás metaadatai hozzáadhatók az ügyfélhez; a fogadó gabona felé irányuló kérésekkel Orleans fog haladni. A szolgáltatást egy nyilvános statikus osztály valósítja meg a RequestContextOrleans névtérben. Ez az osztály két egyszerű módszert tesz elérhetővé:

void Set(string key, object value)

Az előző API egy érték tárolására szolgál a kérelemkörnyezetben. Az érték bármilyen szerializálható típus lehet.

Object Get(string key)

A rendszer az előző API-t használja egy érték lekérésére az aktuális kérelemkörnyezetből.

A háttértár aszinkron RequestContext helyi. Amikor egy hívó (akár ügyféloldali, akár azon belül Orleans) kérést küld, a hívó RequestContext tartalmának tartalma szerepel a Orleans kérés üzenetében; amikor a szemcsés kód megkapja a kérést, a metaadatok a helyiről RequestContextérhetők el. Ha a szemcsés kód nem módosítja a RequestContextkódot, akkor minden olyan gabona, amelyre kéri, ugyanazokat a metaadatokat fogja megkapni, és így tovább.

Az alkalmazás metaadatai akkor is megmaradnak, ha egy későbbi számítást StartNew ütemez a következővel, vagy ContinueWith– mindkét esetben a folytatás ugyanazokkal a metaadatokkal fog futni, mint az ütemezési kód a számítás ütemezésének pillanatában (vagyis a rendszer másolatot készít az aktuális metaadatokról, és átadja a folytatásnak, így a folytatás nem fogja látni a ContinueWith hívás StartNew utáni módosításokat).

Fontos

Az alkalmazás metaadatai nem áramlanak vissza válaszokkal; vagyis a válasz fogadása eredményeként lefutott kód egy folytatáson belül ContinueWith vagy egy hívás Task.Wait()GetValueután is az eredeti kérés által beállított jelenlegi környezetben fog futni.

Ha például új nyomkövetési azonosítót szeretne beállítani az ügyfélben Guid, egyszerűen hívja meg a következőt:

RequestContext.Set("TraceId", Guid.NewGuid());

A grain code-on belül (vagy más, ütemezőszálon futó kódon belül Orleans ) az eredeti ügyfélkérés nyomkövetési azonosítója használható például napló írásakor:

Logger.Info("Currently processing external request {0}", RequestContext.Get("TraceId"));

Bár bármilyen szerializálható objektum elküldhető alkalmazás-metaadatokként, érdemes megemlíteni, hogy a nagy vagy összetett objektumok jelentős többletterhelést okozhatnak az üzenetek szerializálási idejében. Ezért ajánlott egyszerű típusok (sztringek, GRAFIKUS AZONOSÍTÓk vagy numerikus típusok) használata.