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ém

Klient 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í
  1. Vytvořte COM objekt Com konektor (název třídy - V8X.ComConnector). Možnosti:
  2. Probíhá (inproc)
  3. Třída V8X.ComConnector musí být registrována se stejnou bitovou rychlostí jako klient COM
  4. 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.
  5. 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.
  6. Objekt COM je vytvořen v paměti klienta COM
  7. Náklady na vytvoření přibližně - 0,01 (první) / 0,001 (druhá) s
  8. Příklad

  9. Místní mimo proces (místní)
  10. 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.
  11. Objekt COM je vytvořen v paměti procesu hostitele služby (dllhost.exe) v klientském počítači modelu COM
  12. Náklady na vytvoření přibližně - 0,06 (první) / 0,03 (druhé) sek
  13. Příklad
    ComConnector \u003d Nový COMObject („V83.ComConnector“);
    ExternalConnection \u003d ComConnector.Connect (ConnectionString);
  14. Out-of-process non-local (DCOM)
  15. 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.
  16. 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.
  17. Objekt COM je vytvořen v paměti procesu hostitele služby (dllhost.exe) na jiném počítači
  18. Náklady na vytvoření přibližně
  19. 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í.
  1. Příklad
    ComConnector \u003d Nový COMObject („V83.ComConnector“, ComputerName);
    ExternalConnection \u003d ComConnector.Connect (ConnectionString);
  2. Provedení metody Connect (vytvoření vnějšího připojení)
  3. Vytvoření relace - 1 s
  4. Inicializace relace - sek
  5. Před spuštěním systému (pouze pro Automation Server)
  6. Na začátku systému
  7. Inicializace parametrů relace
  8. 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

  1. Minimum pro probíhající Com-server
  2. Průměr pro místní Com-server mimo proces
  3. 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

  1. 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
  2. Nyní nepotřebujeme měnit konfiguraci základny serveru COM, abychom tam mohli využívat komplexní funkce.
  3. V našem produktu jsme jej pojmenovali „Service Processor“. Přenos a inicializace trvá přibližně 1 sekundu
  4. 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. “
  5. Vytváříme inline zpracování, aby se takové volání uskutečnilo v klientovi COM
  6. Předávání agregovaných objektů
  7. Serializujte všechny vstupní parametry na straně klienta COM
  8. Deserializovat všechny vstupní parametry na straně serveru COM
  9. Serializace všech výstupních parametrů na straně serveru COM
  10. Deserializovat všechny výstupní parametry na straně klienta COM
  11. V našem produktu jsme jej pojmenovali „Spuštění služby Infobase“
  12. Poskytněte nastavitelnou frekvenci pro více volání COM
  13. 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:
  1. 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
  2. Klient COM nemá žádné informace o průběhu volání na serveru COM
V boji proti těmto nepříjemnostem můžete uspořádat zpětnou vazbu ze serveru COM ke klientovi COM předáním serveru COM odkaz na společný modul klienta COM a pravidelným voláním klienta COM přes něj. Je třeba poznamenat, že existují chyby platformy (https://partners.v8.1c.ru/forum/t/1382465/m/1382465), které se objeví, když jsou odkazy na jeden společný modul vytvořeny na více než jednom relačním serveru COM. Proto je prozatím nejlepší vymazat společné odkazy na moduly na všech zadržených serverech COM, než se pustíte do nového. V zpětných voláních můžete předat:
  1. informace o postupu
  2. 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

  1. Externí připojení (V8X.ComConnector)
  2. Registrace: Regsvr32 comcntr.dll
  3. Zrušení registrace: Regsvr32 comcntr.dll / u
  4. Automation Server (V8X.Application)
  5. Registrace - 1cv8.exe / regserver
  6. 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

  1. Vysoké náklady na připojení / inicializaci
  2. Zachování com serverů je účinným prostředkem
  3. Dočasné úložiště. Výrobce to nedoporučuje, ale není kam jít. http://infostart.ru/public/331683/
  4. Opětovné použití návratových hodnot. Vyčištěno každých 20 minut
  5. Různá sestavení klientské a serverové platformy se stejnou edicí platformy
  6. Abychom mohli obejít každé sestavení platformy, které se liší od klienta COM, přiřadíme a nakonfigurujeme server DCOM
  7. 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
  8. K obejití používáme princip „minimálního volání COM“
  9. Když je výjimka předána ze serveru COM, má krátkou formu kvůli chybě platformy
  10. 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
  11. 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)“
  12. 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.
  13. Pomalé kanály (velká zpoždění)
  14. 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
  15. Ukládání do mezipaměti (opětovné použití) serverů COM
  16. Nelze přerušit připojení pracovního procesu, který čeká na dokončení volání serveru COM
  17. Ř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.
  18. Při přístupu k objektu COM může dojít k chybě „Neznámá chyba“. Možné důvody:
  19. Com-server přestal existovat. Možné důvody:
  20. Přetečení zásobníku
  21. Neodstranitelná chyba
  22. Hostitelský proces skončil
  23. Ztráta komunikace s nelokálním serverem COM
  24. 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
  25. 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 ()
  26. 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

  1. Výše popsané potíže s interakcí různých sestav platformy 1C, které pro jejich řešení vyžadují mechanismus služby
  2. Vysoké náklady na připojení / inicializaci jsou proto při absenci ukládání do mezipaměti neúčinné pro časté malé hovory
  3. Vazba na rodinu operačních systémů (platforma) Windows

Výhody

  1. Není třeba měnit konfiguraci základen, ke kterým se připojujeme
  2. Široká funkčnost
  3. Snadnější ladění
  4. Není třeba nasadit a udržovat webový server

Zachycování licencí CAL

Ve většině případů jsou všechny klientské aplikace, jejichž zvláštním případem je automatizační server as rezervacemi externí připojení, v jedné relaci OS je pro všechny vyžadována pouze jedna licence. Pokud se však klientské aplikaci nepodařilo získat hardwarovou licenci (z místního HASP nebo síťového HASP) a softwarovou licenci (platforma nebo základní konfigurace), pokusí se získat samostatnou licenci ze serveru 1C: Enterprise. Server 1C: Enterprise může vydat licenci pouze v případě, že vlastnosti databáze umožňují vydávání licencí serverem 1C: Enterprise. V tomto případě může každá klientská aplikace a vnější připojení získat svou vlastní licenci.

Závěr

Pokud se chcete dozvědět více o popsaných funkcích, můžete si zdarma stáhnout konfigurační a ukázkovou základnu produktu, pro kterou je nutné provést předběžnou objednávku na Infostart pro produkt 2iS: Integration. Navzdory přítomnosti chráněného modulu v konfiguraci je otevřeno 99% kódu konfiguračního programu, to znamená, že můžete studovat implementaci popsaných technik.