Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Marshaling v rámci interoperability určuje, jak jsou data předávána v argumentech metody a návratových hodnotách mezi spravovanou a nespravovanou pamětí během volání. Zařazování zprostředkovatele komunikace je aktivita modulu runtime prováděná službou zařazování modulu CLR (Common Language Runtime).
Většina datových typů má běžné reprezentace ve spravované i nespravované paměti. Meziplatformní zprostředkovatel tyto typy zvládá za vás. Jiné typy mohou být nejednoznačné nebo nemusí být vůbec reprezentovány ve spravované paměti.
Nejednoznačný typ může mít buď několik nespravovaných reprezentací, které se mapují na jeden spravovaný typ, nebo chybějící informace o typu, například velikost pole. U nejednoznačných typů poskytuje marshaller výchozí reprezentaci a alternativní reprezentace, kde existuje více reprezentací. Můžete zadat jasné pokyny zprostředkovateli o tom, jak má zpracovat nejednoznačný typ.
Vyvolání platformy a modely spolupráce COM
Modul CLR (Common Language Runtime) poskytuje dva mechanismy pro spolupráci s nespravovaným kódem:
- Vyvolání platformy, které umožňuje spravovanému kódu volat funkce exportované z nespravované knihovny.
- Interoperabilita modelu COM, která umožňuje spravovanému kódu pracovat s objekty modelu COM (Component Object Model) prostřednictvím rozhraní.
Platformní volání i COM interoperabilita používají technologii marshalingu pro interoperabilitu k přesnému přesouvání argumentů metody mezi volajícím a volanou a zpět, pokud je to potřeba. Jak ukazuje následující obrázek, volání metody platformy plyne ze spravovaného do nespravovaného kódu a nikdy opačně, s výjimkou případů, kdy jsou zapojeny funkce zpětného volání. I když volání platformy můžou probíhat pouze ze spravovaného do nespravovaného kódu, data mohou proudit oběma směry jako vstupní nebo výstupní parametry. Volání metod COM pro interoperabilitu mohou proudit v obou směrech.
Na nejnižší úrovni používají oba mechanismy stejnou službu zprostředkování interoperability; některé datové typy jsou však podporovány výhradně prostřednictvím COM interop nebo vyvolání platformy. Podrobnosti naleznete v Výchozí chování při zařazování.
Marshalling a COM apartmány
Zprostředkovatel interoperability zařazuje data mezi haldou „common language runtime“ a nespravovanou haldou. K zařazování dochází vždy, když volající a volaný nemohou pracovat se stejnou instancí dat. Meziprocesorový marshaller umožňuje, aby volající a volaný vypadali, že pracují na stejných datech, i když mají vlastní kopii těchto dat.
Com má také zařazovač, který zařazuje data mezi apartmány COM nebo různými procesy COM. Při volání mezi spravovaným a nespravovaným kódem ve stejném COM bytečku je zprostředkování pomocí maršálování jediné, které se používá. Při volání mezi spravovaným kódem a nespravovaným kódem v jiném apartmánu COM nebo jiným procesem jsou zapojeny jak zprostředkovatele komunikace, tak i zařazovač modelu COM.
Klienti modelu COM a spravované servery
Spravovaný server, který byl exportován a má knihovnu typů registrovanou pomocí nástroje Regasm.exe (Nástroj pro registraci sestavení), má položku registru nastavenou ThreadingModel na Both. Tato hodnota označuje, že server lze aktivovat v apartmánu s jedním vláknem (STA) nebo vícevláknovém apartmánu (MTA). Objekt serveru se vytvoří ve stejném bytě jako jeho volající, jak je znázorněno v následující tabulce:
| Klient modelu COM | Server .NET | Požadavky na organizaci |
|---|---|---|
| STA |
Both se změní na STA. |
Shodný byt seřaďovací. |
| MTA |
Both přemění se na MTA. |
Shodný byt seřaďovací. |
Vzhledem k tomu, že klient a server jsou ve stejné lokalitě, služba pro zprostředkování interoperability automaticky zpracovává všechna data. Následující obrázek znázorňuje službu interop marshalling fungující mezi spravovanými a nespravovanými haldami v rámci stejného COM stylu apartmánu.
Pokud plánujete exportovat spravovaný server, mějte na paměti, že klient COM určuje byto serveru. Spravovaný server, který volá klient COM inicializovaný v MTA, musí zajistit bezpečnost vláken.
Spravované klienty a COM servery
Výchozí nastavení spravovaných klientských apartmánů je MTA; Typ aplikace klienta .NET však může změnit výchozí nastavení. Například nastavení klientského apartmánu jazyka Visual Basic je STA. Můžete použít vlastnost System.STAThreadAttribute, vlastnost System.MTAThreadAttribute, vlastnost Thread.ApartmentState nebo vlastnost Page.AspCompatMode k prozkoumání a změně nastavení spravovaného klienta.
Autor komponenty nastaví spřažení vláken serveru COM. Následující tabulka ukazuje kombinace nastavení apartmánu pro klienty .NET a servery COM. Zobrazuje také výsledné požadavky na zařazování pro kombinace.
| Klient .NET | Server COM | Požadavky na organizaci |
|---|---|---|
| MTA (výchozí) | MTA STA |
Zařazování zprostředkovatele komunikace. Interoperabilita a zařazování modelu COM. |
| STA | MTA STA |
Interoperabilita a zařazování modelu COM. Zařazování zprostředkovatele komunikace. |
Když je spravovaný klient a nespravovaný server ve stejném bytě, služba zařazování interoperability zpracovává všechna zařazování dat. Pokud se však klient a server inicializují v různých apartmánech, je také vyžadováno COM marshalling. Následující obrázek znázorňuje prvky volání mezi apartmány:
Pro vytváření strukturovaného přístupu mezi byty lze provést následující kroky:
Přijměte režii maršálování mezi byty, což je zřetelné pouze když dochází k mnoha voláním přes hranici. Chcete-li úspěšně překračovat hranice bytu, je nutné zaregistrovat knihovnu typů komponenty COM.
Upravte hlavní vlákno nastavením klientského vlákna na STA nebo MTA. Pokud například klient C# volá mnoho komponent STA COM, můžete se vyhnout zařazování mezi byty nastavením hlavního vlákna na STA.
Poznámka:
Jakmile se vlákno klienta C# nastaví na STA, volání MTA komponent COM budou vyžadovat maršálování mezi byty.
Pokyny k explicitnímu výběru modelu bytu najdete v tématu Spravovaná a nespravovaná vlákna.
Příprava vzdálených volání
Tak jako u zařazování mezi byty, je zařazování COM součástí každého volání mezi spravovaným a nespravovaným kódem, kdykoli se objekty nacházejí v samostatných procesech. Například:
- Klient modelu COM, který používá spravovaný server na vzdáleném hostiteli, využívá distribuované prostředí COM (DCOM).
- Spravovaný klient, který na vzdáleném hostiteli vyvolá server COM, používá objekt DCOM.
Následující obrázek znázorňuje, jak seřazování zprostředkovatele komunikace a seřazování modelu COM poskytuje komunikační kanály napříč hranicemi procesů a hostitelů:
Zachování identity
Modul CLR (Common Language Runtime) zachovává identitu spravovaných a nespravovaných odkazů. Následující obrázek znázorňuje tok přímých nespravovaných odkazů (horní řádek) a přímých spravovaných odkazů (dolní řádek) napříč hranicemi procesu a hostitele.
COM
Na tomto obrázku:
Nespravovaný klient získá odkaz na objekt COM ze spravovaného objektu, který získá tento odkaz ze vzdáleného hostitele. Mechanismus vzdálené komunikace je DCOM.
Spravovaný klient získá odkaz na spravovaný objekt z objektu COM, který získá tento odkaz ze vzdáleného hostitele. Mechanismus vzdálené komunikace je DCOM.
Poznámka:
Exportovaná knihovna typů spravovaného serveru musí být zaregistrovaná.
Počet hranic procesu mezi volajícím a volaným je irelevantní; stejné přímé odkazování probíhá u volání v rámci procesu i mimo něj.
Spravované vzdálené ovládání
Modul runtime také poskytuje spravovanou komunikaci, kterou můžete použít k vytvoření komunikačního kanálu mezi spravovanými objekty napříč procesem a hranicemi hostitele. Spravované vzdálené připojení může umožňovat bránu firewall mezi komunikujícími komponentami, jak je znázorněno na následujícím obrázku:
Vzdálená volání Vzdálená volání přes brány firewall pomocí protokolu SOAP nebo třídy TcpChannel
Některá nespravovaná volání mohou být směrována prostřednictvím protokolu SOAP, například volání mezi obsluhovanými součástmi a COM.
Související témata
| Titulek | Popis |
|---|---|
| Výchozí chování při marshalling | Popisuje pravidla, která používá marshallingová služba pro interoperabilitu k zařazování dat. |
| Zařazování dat pomocí vyvolání platformy | Popisuje, jak deklarovat parametry metody a předávat argumenty funkcím exportovaným nespravovanými knihovnami. |
| Zařazování dat pomocí COM Interop | Popisuje, jak přizpůsobit obaly COM, aby se změnilo chování při zprostředkování. |
| Postupy: Migrace modelu DCOM Managed-Code do WCF | Popisuje, jak migrovat z modelu DCOM na WCF. |
| Postupy: Mapování HRESULTů a výjimek | Popisuje, jak mapovat vlastní výjimky na HRESULT a poskytuje kompletní mapování z každého jednotlivého HRESULT na jeho srovnatelnou třídu výjimek v prostředí .NET Framework. |
| Spolupráce pomocí obecných typů | Popisuje, které akce jsou podporovány při použití obecných typů pro interoperabilitu modelu COM. |
| Spolupráce s nespravovaným kódem | Popisuje služby interoperability poskytované modulem CLR (Common Language Runtime). |
| Pokročilá interoperabilita modelu COM | Poskytuje odkazy na další informace o začlenění komponent MODELU COM do vaší aplikace .NET Framework. |
| Aspekty návrhu pro spolupráci | Obsahuje tipy pro psaní integrovaných komponent modelu COM. |