Najednou jsem narazil na problém vytvoření připojení COM na straně serveru. Problém je obtížné diagnostikovat, protože kód, který funguje dobře pod klientem, odmítá pracovat na serveru, například pokud kód provádí naplánovanou úlohu.
Níže navrhovaná technika umožňuje zbavit se popsaného problému. Po přeinstalování platformy se bohužel vše vrátí do normálu a postup je nutné opakovat.
Http://www.steeltrace.ru/details/articleid/22/%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1 % 86% D0% B8% D1% 8F-1% D1% 81-com-% D0% BA% D0% BE% D0% BC% D0% BF% D0% BE% D0% BD% D0% B5% D0% BD% D1% 82% D0% B0-% D0% B4% D0% BB% D1% 8F-% D1% 80% D0% B0% D0% B1% D0% BE% D1% 82% D1% 8B-% D1 % 81-64-% D0% B1% D0% B8% D1% 82% D0% BD% D1% 8B% D0% BC% D0% B8-% D0% BF% D1% 80% D0% B8% D0% BB % D0% BE% D0% B6% D0% B5% D0% BD% D0% B8% D1% 8F% D0% BC% D0% B8.aspx
Aktualiz. Doplněk: Pokud má 64bitový server Windows 1C Enterprise 64bitový server (v distribuci windows64.rar),
pak nebude žádný takový problém. Instalační program umožňuje nainstalovat konektor COM bez instalace severu samotného. To je užitečné, když je aplikace implementována na platformě 8.3 a je potřeba připojení COM k základnám 8.2.
Díky za přidáníbrix8x.
Algoritmus pro nastavení systému je uveden s obrazovkou pro každou akci.
2. Registrace komponent comcntr.dll
5. Spuštění serveru 1C. (Požadované :)
Volání na konzolu
Registrujeme komponentu. Komponenta chybí, pokud je nainstalován pouze 1C server. Z nějakého důvodu ji 1C publikuje pouze jako součást klienta.
Aktualiz... Pokud se komponenta nezaregistruje, možná budete muset nejprve odstranit starou komponentu, teprve potom se zvýší nová.
Dělá regsvr32 / u "c: \\ Program Files \\ 1cv8 \\ 8.2.18.82 \\ bin \\ comcntr.dll"
Pak totéž, ale bez "/ u" regsvr32 "c: \\ Program Files \\ 1cv8 \\ 8.2.18.82 \\ bin \\ comcntr.dll"
Díky za přidáníshur52.
Spouštíme službu komponent. Popsáno pro Windows Server 2008 R2 Standart.
Ve větvi Komponenty přidávají novou komponentu comcntr.dll
DŮLEŽITÉ!!! Po instalaci musíte mírně změnit vlastnosti. Tato jemnost není nikde popsána, bez ní by to nefungovalo pro mě!
Restartování fyzického serveru
Komponenta COM dodávaná s platformou umožňuje vzájemnou interakci několika informačních bází a také získání přístupu k databázím 1C: Enterprise z aplikací třetích stran. Více si můžete přečíst na oficiální webové stránky.
Uvažovali jsme o příkladu práce prostřednictvím připojení COM v jednom z předchozích článků. Dnes se podíváme na kroky v systému potřebné k použití komponenty COM.
Registrace v systému
Po instalaci platformy do počítače by měl instalační program nainstalovat komponentu COM automaticky. Soubor externí komponenty je umístěn v adresáři:
C: \\ Program Files \\ 1cv82 \\ [verze platformy] \\ bin \\ comcntr.dll
Při instalaci nové verze platformy bude tedy nainstalována nová součást umístěná v příslušném adresáři. Chcete-li použít komponentu COM, musí být zaregistrována v operačním systému.
Existují situace, kdy instalační program nemůže automaticky zaregistrovat DLL v operačním systému, takže to musíte udělat ručně. Při instalaci nové verze platformy na již nainstalovanou bude možná nutné se zaregistrovat comcntrl.dll z adresáře nainstalované verze.
Ruční akce můžete provádět pomocí příkazového řádku spuštěného jako správce, a to následovně:
regsvr32 comcntrl.dll
běží ve výše uvedeném adresáři.
V tomto článku budu hovořit o mnoha funkcích interakce mezi databázemi 1C pomocí technologie COM, které se nashromáždily v průběhu let vývoje a používání produktu 2iS pro komerční integraci: Integrace naší společnosti 2iS.
Podmínky
OS - operační systémKlient COM je proces OS (vlákno), který požadoval vytvoření objektu COM
COM server - objekt COM vytvořený na žádost klienta
Com-konektor - COM-object V8X.ComСonnector pro vytváření externích připojení se základnami 1C
Automatizační server - aka OLE server, objekt COM V8X. Aplikace pro vytváření aplikací 1C
Vydání platformy - podřetězce až do druhé tečky verze platformy (např. 8.2, 8.3)
Sestavení platformy - řetězec verze celé platformy (např. 8.2.19.130, 8.2.16.352)
Připojení externího připojení
Zvažme podrobně algoritmus pro připojení externího připojení- Vytvořte COM objekt Com konektor (název třídy - V8X.ComConnector). Možnosti:
- Probíhá (inproc)
- Třída V8X.ComConnector musí být registrována se stejnou bitovou rychlostí jako klient COM
- Pokud je edice klientské platformy COM stejná jako edice serverové platformy COM, je také požadována rovnost sestavení klientské platformy COM a serveru COM.
- Zaregistruje se, když je platforma nainstalována s možností „Externí připojení“. Kdykoli jej lze zaregistrovat pomocí příkazu „Regsvr32 comcntr.dll“ v adresáři spustitelných souborů platformy.
- Objekt COM je vytvořen v paměti klienta COM
- Náklady na vytvoření přibližně - 0,01 (první) / 0,001 (druhá) s
- Příklad
- Místní mimo proces (místní)
- Musí být zaregistrována třída V8X.ComConnector libovolného bitu platformy a sestavení. Je nutné nakonfigurovat aplikaci COM + s aktivací „serverová aplikace“ / „Serverová aplikace“ přes dcomcnfg.exe. Podrobnosti najdete níže.
- Objekt COM je vytvořen v paměti procesu hostitele služby (dllhost.exe) v klientském počítači modelu COM
- Náklady na vytvoření přibližně - 0,06 (první) / 0,03 (druhé) sek
- Příklad
ComConnector \u003d Nový COMObject („V83.ComConnector“);
ExternalConnection \u003d ComConnector.Connect (ConnectionString); - Out-of-process non-local (DCOM)
- Třída V8X.ComConnector jakékoli bitness a sestavení platformy musí být zaregistrována v jiném než místním počítači. Je nutné nakonfigurovat aplikaci COM + s aktivací „Serverová aplikace“ / „Serverová aplikace“ na nelokálním počítači pomocí dcomcnfg.exe. Podrobnosti najdete níže.
- Je nutné nakonfigurovat roli „Aplikační server“ / „Aplikační server“ na nelokálním počítači a povolit nelokální přístup COM + výběrem možnosti „Přístup k síti COM +“ / „Přístup k síti COM +“. Podrobnosti najdete níže.
- Objekt COM je vytvořen v paměti procesu hostitele služby (dllhost.exe) na jiném počítači
- Náklady na vytvoření přibližně
- Experimentální data
Graf ukazuje, že doba trvání vytvoření tohoto objektu COM je přímo úměrná zpoždění kanálu a poměr stran je přibližně 24. Lze předpokládat, že když je tento objekt COM vytvořen, probíhá prostřednictvím kanálu 24 volání.
- Příklad
ComConnector \u003d Nový COMObject („V83.ComConnector“, ComputerName);
ExternalConnection \u003d ComConnector.Connect (ConnectionString); - Provedení metody Connect (vytvoření vnějšího připojení)
- Vytvoření relace - 1 s
- Inicializace relace - sek
- Před spuštěním systému (pouze pro Automation Server)
- Na začátku systému
- Inicializace parametrů relace
- Načítání požadovaných metadat
Náklady na volání COM
Pokaždé, když přistupujeme k vlastnosti nebo metodě objektu COM ve vloženém jazyce (provádíme volání COM), provede se řada dalších akcí ve srovnání s přístupem k nativnímu objektu vloženého jazyka. Pokud je server COM v jiném místním procesu, jsou nejprve přeneseny všechny parametry z klienta COM na server COM a na konci jsou parametry přeneseny zpět do klienta COM. U takového přenosu musí být informace přirozeně serializovány na straně odesílatele a poté deserializovány na straně příjemce, což se spolu s některými dalšími akcemi nazývá zařazování a oddělování. V nelokálním režimu (DCOM) takový přenos bude stále ztrácet čas na síťové komunikaci a při prvním volání nového objektu COM přenést jeho kostru, a proto bude hrát rozhodující roli zpoždění kanálu (Více o COM hovory, DCOM na Wikipedii, technický přehled DCOM,)Korelace nákladů na volání podle typů umístění serveru COM
- Minimum pro probíhající Com-server
- Průměr pro místní Com-server mimo proces
- Střední až velký pro lokální server Cоm mimo proces, v závislosti na kvalitě komunikačního kanálu
Minimalizace počtu volání COM
- Vytváříme základní externí zpracování se sadou běžných metod pro příjem volání od klienta COM na straně serveru COM
- Nyní nepotřebujeme měnit konfiguraci základny serveru COM, abychom tam mohli využívat komplexní funkce.
- V našem produktu jsme jej pojmenovali „Service Processor“. Přenos a inicializace trvá přibližně 1 sekundu
- Interakci se serverem COM navrhujeme podle principu „minimálních volání COM“, tj. Připravíme vše potřebné na straně klienta COM a předáme jeden velký hovor jako parametry. “
- Vytváříme inline zpracování, aby se takové volání uskutečnilo v klientovi COM
- Předávání agregovaných objektů
- Serializujte všechny vstupní parametry na straně klienta COM
- Deserializovat všechny vstupní parametry na straně serveru COM
- Serializace všech výstupních parametrů na straně serveru COM
- Deserializovat všechny výstupní parametry na straně klienta COM
- V našem produktu jsme jej pojmenovali „Spuštění služby Infobase“
- Poskytněte nastavitelnou frekvenci pro více volání COM
- Například lze uskutečňovat datová volání s proměnnou frekvencí
Zpětná vazba
Při použití principu „minimálních volání COM“ bude kód většinou prováděn v cizím kontextu, což vážně zvyšuje některé nepříjemnosti volání COM:- Tok klienta COM a jeho připojení k aplikačnímu serveru 1C nemůžete přerušit, dokud není dokončeno volání na server COM
- Klient COM nemá žádné informace o průběhu volání na serveru COM
- informace o postupu
- nahromaděné zprávy uživateli (příjem funkcí GetMessagesUser (True))
Schéma zásady „minimálního volání COM“
Toto schéma je přátelské k velkým zpožděním komunikačních kanálů. Proto je to hodně jako volat webovou službu. Proto tím, že ji použijete pro interoperabilitu modelu COM, výrazně snížíte náklady na možné přechody mezi modelem COM a webovou službou v obou směrech.
Ladění
Při použití principu „minimálních volání COM“ je možné usnadnit ladění provádění kódu na serveru COM vytvořením volitelného modálního okna pro připojení k základně v klientovi COM. V tomto okně by mělo být možné nastavit parametry jednorázového připojení, provádět pomocné funkce a zobrazit informace o připojené relaci. Níže je uveden příklad takového okna z našeho produktu.Chcete-li povolit schopnost ladit externí připojení, vytvořte v podadresáři conf soubor comcntrcfg.xml s příslušným obsahem. V okně připojení můžete vytvořit tlačítko / zaškrtávací políčko pro programové vytvoření takového souboru. Mnoho verzí platformy však obsahuje chybu, kvůli které nejsou ladicí položky externích připojení v ladicím programu viditelné ani u tohoto správně nakonfigurovaného souboru. Na platformě 8.3 se tyto problémy zdají být vyřešeny.
Příklad souboru comcntrcfg.xml:
Nesmíme také zapomenout na nutnost spustit konfigurátor pro ladění se stejným (až do velkých písmen) připojovacím řetězcem jako položka ladění. Proto v tomto dialogovém okně musíte vytvořit tlačítko pro spuštění konfigurátoru serveru COM se správným připojovacím řetězcem.
Problém neviditelnosti objektu externího ladění připojení a řadu dalších nepříjemností lze do jisté míry obejít provedením kódu jednou na tlustém klientovi nahrazením režimu „Externí připojení“ „Automatizačním serverem“ (aplikace ), tj pomocí třídy COM V8X. Aplikace a zahrnutá viditelnost. Okno připojení proto vyžaduje parametry pro výběr režimu připojení.
Po vytvoření připojení na straně klienta COM je obvykle nutné připojit základní debugger serveru COM a nastavit tam zarážku na správném místě. Proto v okně připojení musíte umístit tlačítko připojení pro debugger / konfigurátor serveru COM. Pokud je server COM spuštěn v režimu viditelné aplikace, můžete v něm použít asynchronní volání výjimky a připojit debugger. Z dialogového okna s chybou v aplikaci serveru COM, přes tlačítko Konfigurátor, můžete otevřít konfigurátor a ve většině případů okamžitě připojit ladicí program. Pokud připojení debuggeru není tímto způsobem k dispozici, operátorovi pomůže zobrazení informací o relaci (její číslo) v databázi serveru COM. Potřebujete také tlačítko k otevření externího zpracovatelského souboru v otevřeném ladicím programu, který se v něm provede.
Správa tříd COM a aplikací COM + 1C
Správa třídy COM
- Externí připojení (V8X.ComConnector)
- Registrace: Regsvr32 comcntr.dll
- Zrušení registrace: Regsvr32 comcntr.dll / u
- Automation Server (V8X.Application)
- Registrace - 1cv8.exe / regserver
- Deregistrace - 1cv8.exe / unregserver
Správa aplikací COM +
Provádí se to pomocí modulu snap-in dcomcnfg.exe. Chcete-li zaregistrovat 1C jako aplikaci COM +, musíte otevřít modul snap-in "dcomcnfg". V něm v části „Služby komponent“ - „Počítače“ - „Tento počítač“ - „Aplikace COM +“ musíte přidat novou aplikaci. Při přidávání můžete zadat libovolný název. Dále musíte na kartě Identita zadat uživatele, jehož jménem bude aplikace COM + spuštěna. Musíte také nastavit přístup k aplikaci pro všechny uživatele přidáním, pokud chybí, role s libovolným názvem ve větvi Role a přidáním uživatele Everyone do jeho větve Users. Po přidání aplikace musíte vytvořit novou komponentu. Chcete-li to provést, ve větvi „Komponenty“ vytvořené aplikace vyberte položku nabídky „Nový“ - „Komponenta“. Při vytváření vyberte import již zaregistrovaných komponent a najděte v seznamu (nejlépe 64bitovou) komponentu 1C (V8x.COMConnector.1).Náš produkt má nástroj „1C COM Classes Management“ pro prohlížení / registraci / změnu všech tříd COM a aplikací COM + 1C na zadaném počítači:
Konfigurace serveru DCOM
U Windows 2008 Server přidejte roli aplikačního serveru. Chcete-li to provést, otevřete ovládací panel počítače, klikněte pravým tlačítkem do větve „Role“ a vyberte položku nabídky „Přidat roli“.Objeví se oko, ve kterém musíte vybrat roli „Aplikační server“ / „Aplikační server“. Ve fázi výběru rolí aplikačního serveru musíte určit položku „Přístup k síti COM +“ / „Přístup k síti COM +“. Pokud to není provedeno, zobrazí se při pokusu o vytvoření objektu COM chyba „Chyba při volání konstruktoru (COMObject): Komponenta nebo aplikace obsahující komponentu byla deaktivována“.
Problémy
- Vysoké náklady na připojení / inicializaci
- Zachování com serverů je účinným prostředkem
- Dočasné úložiště. Výrobce to nedoporučuje, ale není kam jít. http://infostart.ru/public/331683/
- Opětovné použití návratových hodnot. Vyčištěno každých 20 minut
- Různá sestavení klientské a serverové platformy se stejnou edicí platformy
- Abychom mohli obejít každé sestavení platformy, které se liší od klienta COM, přiřadíme a nakonfigurujeme server DCOM
- Nedostatek informací o typech objektů 1C vnořených v objektech COM (místo typu objektu 1C dostáváme všude typ „COMObject“) a nedostatek kontextových rad
- K obejití používáme princip „minimálního volání COM“
- Když je výjimka předána ze serveru COM, má krátkou formu kvůli chybě platformy
- Abychom to vyřešili, zabalíme každé volání na straně serveru COM při pokusu a ve výjimce znovu vytvoříme výjimku s úplným popisem chyby
- Při vytváření objektu COM se chyba „Verze komponenty„ comcntr “(8.X.XX.XXX) liší od verze kořenového modulu„ core82 “(8.X.YY.YYY)“
- Chcete-li tento problém vyřešit, vytvořte aplikaci COM + s aktivací mimo proces. Poté bude server COM vytvořen v samostatném procesu a verze těchto modulů se nebudou muset shodovat.
- Pomalé kanály (velká zpoždění)
- Přiřazujeme a konfigurujeme vlastní server DCOM pro každou podsíť za samostatným pomalým kanálem a při přístupu k databázím za tímto kanálem vytváříme na tomto počítači servery COM, čímž minimalizujeme počet a objem volání Com-klienta<->Com server
- Ukládání do mezipaměti (opětovné použití) serverů COM
- Nelze přerušit připojení pracovního procesu, který čeká na dokončení volání serveru COM
- Řešením je vytvořit objekty COM ve vyhrazených hostitelských procesech vhodnou konfigurací aplikace COM + a registrací těchto ID procesů, když jsou vázány na relace klienta COM. Pak, pokud je nutné dokončit připojení serveru k takové relaci, můžete nejprve zabít proces serveru COM a poté samotnou relaci.
- Při přístupu k objektu COM může dojít k chybě „Neznámá chyba“. Možné důvody:
- Com-server přestal existovat. Možné důvody:
- Přetečení zásobníku
- Neodstranitelná chyba
- Hostitelský proces skončil
- Ztráta komunikace s nelokálním serverem COM
- Odpovídající názvy vlastností a metod bez parametrů objektu vytvářejí nejednoznačnost při odkazování na ně prostřednictvím COM
- Například pokud má odkaz atribut FullName, pak z důvodu metody FullName () může mít přístup k atributu FullName prostřednictvím modelu COM za následek volání metody FullName ()
- Abychom se dostali kolem, používáme princip „minimálního volání COM“
Webové služby Com-technology VS v místní síti
nevýhody
- Výše popsané potíže s interakcí různých sestav platformy 1C, které pro jejich řešení vyžadují mechanismus služby
- Vysoké náklady na připojení / inicializaci jsou proto při absenci ukládání do mezipaměti neúčinné pro časté malé hovory
- Vazba na rodinu operačních systémů (platforma) Windows
Výhody
- Není třeba měnit konfiguraci základen, ke kterým se připojujeme
- Široká funkčnost
- Snadnější ladění
- Není třeba nasadit a udržovat webový server