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.
Az interop marshalling szabályozza az adatok átadását metódusargumentumokon keresztül, valamint az értékek átvitelét a felügyelt és nem felügyelt memória között hívások során. Az interop-rendezés olyan futtatókörnyezeti tevékenység, amelyet a közös nyelvi futtatókörnyezet rendezési szolgáltatása hajt végre.
A legtöbb adattípus közös ábrázolásokkal rendelkezik mind a felügyelt, mind a nem felügyelt memóriában. Az interop marshaller kezeli ezeket a típusokat az Ön számára. Más típusok nem egyértelműek vagy egyáltalán nem jelölhetők a felügyelt memóriában.
Egy nem egyértelmű típusnak lehet több nem felügyelt reprezentációja, amelyek egyetlen felügyelt típusra leképeződnek, vagy hiányozhatnak típusinformációk, például egy tömb mérete. Kétértelmű típusok esetén a rendező alapértelmezett és alternatív reprezentációkat biztosít, ahol több reprezentáció is létezik. Explicit utasításokat adhat meg a rendezőnek arról, hogyan lehet egy nem egyértelmű típust létrehozni.
Platformhívás és COM interoperációs modellek
A közös nyelvi futtatókörnyezet két mechanizmust biztosít a nem felügyelt kódokkal való együttműködéshez:
- Platformhívás, amely lehetővé teszi, hogy a felügyelt kód meghívja a nem felügyelt kódtárból exportált függvényeket.
- COM-interop, amely lehetővé teszi, hogy a felügyelt kód interfészeken keresztül kommunikáljon a komponensobjektum-modell (COM) objektumaival.
A platformhívás és a COM-interop egyaránt az interop marshalizás használatával pontosan mozgatja a metódusargumentumokat a hívó és a hívott között, ha szükséges. Ahogy az alábbi ábrán látható, a platform meghívja a metódushívási folyamatokat felügyeltről nem felügyelt kódra, és soha nem fordítva, kivéve, ha a visszahívási függvények is részt vesznek. Annak ellenére, hogy a platformhívási hívások csak felügyelt kódból nem felügyelt kódba áramolhatnak, az adatok mindkét irányban áramolhatnak bemeneti vagy kimeneti paraméterként. A COM interop metódushívások két irányban haladhatnak.
A legalacsonyabb szinten mindkét mechanizmus ugyanazt az interop marshalling szolgáltatást használja; vannak olyan adattípusok, amelyeket kizárólag a COM-interop vagy platform-meghívások támogatnak. További részletekért lásd az alapértelmezett marshalling viselkedést.
Marshallolás és COM objektumok
Az interop marshaller az adatokat a közös nyelvi futtatókörnyezet szemétterület és a nem kezelt szemétterület között közvetíti. A szerializálás akkor történik, ha a hívó és a hívott nem tud ugyanazon az adatpéldányon dolgozni. Az interop marshaller lehetővé teszi, hogy a hívó és a hívott úgy tűnjön, mintha ugyanazon az adaton dolgoznának, még akkor is, ha mindkettő saját másolatát használja az adatokból.
A COM egy olyan összekötővel is rendelkezik, amely adatokat küld át a COM-rekeszek vagy a különböző COM-folyamatok között. Ha a felügyelt és a nem felügyelt kód közötti hívás ugyanazon a COM-lakáson belül történik, az interop marshaller az egyetlen közreműködő. Ha a kezelt és nem kezelt kódok között egy másik COM-apartban vagy egy másik folyamatban történik a hívás, mind az interop marshaller, mind a COM-marshaller részt vesz.
COM-ügyfelek és felügyelt kiszolgálók
A Regasm.exe (szerelvényregisztrációs eszköz) által regisztrált típustárral rendelkező exportált kezelt kiszolgáló beállításjegyzék-bejegyzése ThreadingModelBoth értékre van állítva. Ez az érték azt jelzi, hogy a kiszolgáló egyszálas lakásban (STA) vagy többszálú lakásban (MTA) aktiválható. A kiszolgálóobjektum ugyanabban a lakásban jön létre, mint a hívó, ahogy az alábbi táblázatban látható:
| COM-ügyfél | .NET-kiszolgáló | Marshaling követelmények |
|---|---|---|
| STA |
Both sta-ra változik. |
Egylakásos rendezés. |
| MTA |
Both MTA lesz. |
Egylakásos rendezés. |
Mivel a kliens és a szerver ugyanabban a lakásban található, az interop marshalling szolgáltatás automatikusan kezeli az összes adattovábbítást. Az alábbi ábrán az egyazon COM-stílusú lakás felügyelt és nem felügyelt halomai között működő interop marshalling szolgáltatás látható.
Ha felügyelt kiszolgáló exportálását tervezi, vegye figyelembe, hogy a COM-ügyfél határozza meg a kiszolgáló lakását. Az MTA-ban inicializált COM-ügyfél által hívott felügyelt kiszolgálónak biztosítania kell a szál biztonságát.
Felügyelt ügyfelek és COM-kiszolgálók
A felügyelt ügyféllakások alapértelmezett beállítása az MTA; azonban a .NET-ügyfél alkalmazástípusa módosíthatja az alapértelmezett beállítást. A Visual Basic-ügyfél lakásbeállítása például sta. A felügyelt ügyfél lakásbeállításainak vizsgálatához és módosításához használhatja a System.STAThreadAttribute, a System.MTAThreadAttribute, a Thread.ApartmentState tulajdonságot vagy a Page.AspCompatMode tulajdonságot.
Az összetevő szerzője beállítja egy COM-kiszolgáló szál affinitását. Az alábbi táblázat a .NET-ügyfelek és COM-kiszolgálók lakásbeállításainak kombinációit mutatja be. A kombinációkhoz tartozó elosztási követelményeket is megjeleníti.
| .NET-ügyfél | COM-kiszolgáló | Marshaling követelmények |
|---|---|---|
| MTA (alapértelmezett) | MTA STA |
Interop-rendezés. Interop és COM marshalling. |
| STA | MTA STA |
Interop és COM marshalling. Interop-rendezés. |
Amikor egy felügyelt ügyfél és egy nem felügyelt kiszolgáló ugyanabban a helyiségben van, az interop marshalling szolgáltatás kezeli az összes adatrendezést. Ha azonban az ügyfél és a kiszolgáló különböző apartmanokban van inicializálva, a COM marshalingra is szükség van. Az alábbi ábra egy lakásközi hívás elemeit mutatja be:
Lakásközi rendezéshez a következőket teheti:
Fogadja el a lakásközi rendezés többletterhelését, ami csak akkor észlelhető, ha sok hívás van a határon. Regisztrálnia kell a COM-összetevő típuskönyvtárát, hogy a hívások sikeresen átléphessék a környezet határait.
Módosítsa a fő szálat úgy, hogy az ügyfélszálat STA vagy MTA értékre állítja. Ha például a C#-ügyfél számos STA COM-összetevőt hív meg, elkerülheti a lakásközi rendezést, ha a fő szálat STA-ra állítja.
Megjegyzés:
Ha egy C#-kliens szála STA-ra van állítva, az MTA típusú COM-összetevőkre irányuló hívásokhoz lakásközi kiszolgálás szükséges.
A lakásmodellek explicit kiválasztásával kapcsolatos utasításokért lásd: Felügyelt és nem felügyelt szálkezelés.
Távoli hívások átirányítása
A lakásközi rendezéshez hasonlóan a COM-rendezés is részt vesz minden hívásban a felügyelt és a nem felügyelt kód között, amikor az objektumok külön folyamatokban találhatók. Például:
- A távoli gazdagépen felügyelt kiszolgálót meghívó COM-ügyfél elosztott COM -t (DCOM) használ.
- Egy felügyelt ügyfél, amely egy COM-kiszolgálót hív meg egy távoli gazdagépen, DCOM-t használ.
Az alábbi ábra bemutatja, hogyan biztosítanak kommunikációs csatornákat az interop marshalling és a COM marshalling a folyamatok és a gazdagépek határain:
Identitás megőrzése
A közös nyelvi futtatókörnyezet megőrzi a felügyelt és nem felügyelt hivatkozások identitását. Az alábbi ábrán a közvetlen nem felügyelt hivatkozások (felső sor) és a közvetlen felügyelt hivatkozások (alsó sor) folyamat- és állomáshatárok közötti áramlása látható.
Ebben az ábrán:
A nem felügyelt ügyfél egy felügyelt objektumtól kap egy COM-objektumra mutató hivatkozást, amely ezt a hivatkozást egy távoli gazdagépről szerzi be. A távoli elérés mechanizmusa a DCOM.
A felügyelt ügyfelek egy COM-objektumból kapnak egy felügyelt objektumra mutató hivatkozást, amely egy távoli gazdagépről szerzi be ezt a hivatkozást. A távoli elérés mechanizmusa a DCOM.
Megjegyzés:
A felügyelt kiszolgáló exportált típustárát regisztrálni kell.
A hívó és a hívó közötti folyamathatárok száma irreleváns; ugyanez a közvetlen hivatkozás történik a folyamatban lévő és a folyamaton kívüli hívások esetében is.
Felügyelt távoli elérés
A futtatókörnyezet felügyelt távoli elérést is biztosít, amellyel kommunikációs csatornát hozhat létre a felügyelt objektumok között a folyamat- és állomáshatárokon át. A kezelt távoli kommunikáció tűzfal jelenlétében is képes működni a kommunikáló összetevők között, ahogy az alábbi ábrán látható.
Távoli hívások tűzfalakon a SOAP vagy a TcpChannel osztály használatával
Egyes nem felügyelt hívások a SOAP-on keresztül csatornázhatók, például a szervizelt összetevők és a COM közötti hívások.
Kapcsolódó témakörök
| Cím | Leírás |
|---|---|
| Alapértelmezett rendezési viselkedés | Azokat a szabályokat ismerteti, amelyeket az interop marshalling szolgáltatás az adatok marshalásához használ. |
| Adatok rendezése platformhívással | Ismerteti, hogyan deklarálhat metódusparamétereket, és hogyan adhat át argumentumokat a nem felügyelt kódtárak által exportált függvényeknek. |
| Adatok rendezése a COM Interop használatával | Ismerteti, hogyan szabhatja testre a COM-burkolókat a rendezési viselkedés módosítása érdekében. |
| Útmutató: Managed-Code DCOM migrálása WCF-be | Ismerteti, hogyan migrálhat a DCOM-ból a WCF-be. |
| Útmutató: HRESULT-ok és kivételek leképezése | Ismerteti, hogyan képezhet le egyéni kivételeket a HRESULT-ekre, és hogyan biztosít teljes leképezést az egyes HRESULT-okból a .NET-keretrendszer hasonló kivételosztályára. |
| Üzemeltetés általános típusok használatával | Ismerteti, hogy mely műveletek támogatottak a COM-együttműködés általános típusainak használatakor. |
| Nem felügyelt kóddal való együttműködés | A közös nyelvi futtatókörnyezet által biztosított együttműködési szolgáltatásokat ismerteti. |
| Speciális COM-együttműködés | A COM-összetevők .NET-keretrendszeralkalmazásba való beépítésével kapcsolatos további információkra mutató hivatkozásokat tartalmaz. |
| Az együttműködés tervezési szempontjai | Tippek az integrált COM-összetevők írásához. |