RiderDíky za reakci.
Jde o program který se má starat o přenosy datových souborů různých typů z určitého (centrálního) serveru směrem k cílovým serverům firem, které jsou rozmístěny po celé ČR. Nejde ovšem o jednoduché kopírování souborů. Během přenosu z centrálního serveru často dochází k různým transformacím a úpravám v datech a tak mnohdy to co se stáhne ze zdroje a naimportuje na cílové počítače má pozměněnou podobu. Mám-li být konkrétní, jde např. o následující data (faktury, dodací listy, ceníky, různá anketní data atd.)
Celý systém běží na SQL serverech a doteď jsem používal DTS na SQL serveru, jenž bylo časováno pomocí jobu. Nicméně po zkušenostech a různých úpravách se toto ukázalo jako víceméně nespolehlivé.
Proto došlo k přepracování tak, že jednotlivé datové přenosy obstarávají konkrétní uložené procedury na SQL serverech všech firem. Nad těmito specifickými uloženými procedurami je jedna centrální, která je časovaná jobem a v pravidelných intervalech se spouští, přičemž se vždy dotazuje na centrální server, zda jsou k dispozici nová data a pokud ano, zjistí, zda jde např. o faktury a pokud ano, předá řízení uložené proceduře určené ke zpracování faktur. Po ukončení přenosu tato hlavní ul. procedura zapíše na centrální server do logu informaci o průběhu stahování (kolik se stáhlo záznamů, zda byl přenos úspěšný či nikoliv a pokud nebyl, k jaké chybě došlo). A tady je kámen úrazu. Všechny servery jsou navzájem propojeny, nicméně z důvodu bezpečnosti ne jako linked servery. Z toho vyplývá nutnost používat pro vzdálené provádění SQL příkazů OPENROWSET s použitím SQLOLEDB nebo MSDASQL. A pokud dojde během zpracování k chybě na straně vzdáleného počítače, není takto vzniklou chybu možné odchytit (alespoň jsem na to doposud nepřišel) a celý systém zhavaruje (informace o chybě se nepředá z ulož. procedury pro zpracování faktur nadřízené hlavní proceduře). Jinými slovy se mi nepodařilo zjistit, jak odchytit a zpracovat v transact SQL chybu vyvolanou uvnitř poskytovatele datového připojení.
Proto se snažím celý systém předělat tak, že výše zmíněnou hlavní proceduru naprogramuji v .NETu a zabalím ji do služby (kterou je možné časovat a kde je možné chybové stavy ošetřovat bez problémů uvnitř bloku TRY-CATCH). Toto opravdu funguje, ale teď k těm parametrům, o kterých jsem psal. Pokud bude služba spuštěna bez jakéhokoliv parametru, budu se stahovat všechna dostupná data. Pokud bude službě předán název uložené procedury pro zpracování faktur, budou stažena pouze data faktur.
Přiznám se, že v .NETu jsem zatím začátečník a možná existuje i jiná a jednoduchá pomoc. Jakékoliv náměty či návrhy uvítám.
Díky. |