[ nikitaGradov @ 05.10.2014. 13:53 ] @
Da postavim problem: Code: Dim bsnEntity_1 As BsnEntity_1 Dim bsnEntity_2 As BsnEntity_2 Try Using scope As New TransactionScope() bsnEntity_1.InsertIntoTable_1(par1, par2, ...) int count = bsnEntity_1.SelectFromTable_1() bsnEntity_2.UpdateTable_2 (count) ... scope.Complete() End Using catch ... end try Kao sto se vidi iz ovog koda, u okviru jednog TransactionScope-a, postoji (recimo) jedan Insert, jedan Select (koji selektuje redove iz tabele poslije insert-a u tu tabelu) i jedan update u drugu tabelu (koji koristi promenljivu count, dobijenu prethodnim select-om). Da napomenem, radi se o istoj (jednoj) bazi. Jos i to da navedem: baza je na Windows 2008R2 serveru. NAPOMENA : Promenljive bsnEntity_1 i bsnEntity_2 su iz drugih dll-ova. Sistem (aplikacija) je tako zamisljen da svaka metoda, iz drugih projekata (dll-ova), otvara konkeciju, odradi transakciju (insert, update, select, delete) i zatvori konekciju, tako da ne postoje dvije, istovremeno, otvorene konekcije. S druge strane, kao sto se iz primjera vidi, ne postoji JEDNA sql konekcija u ovom konceptu, u okviru koje se poziva TransactionScope, nego se svaka metoda stara o tome da otvori/zatvori konekciju (i taj kod je u drugim dll-ovima). Problem: prvi poziv (bsnEntity_1.InsertIntoTable_1(par1, par2, ...)) prolazi (radi se o insert-u vece kolicine podataka i to potraje nekih 5-6 minuta). Ali, drugi poziv 'puca' i to prilikom otvaranja sql konekcije, uz outer exception: 'operation is not valid for the state of the transaction'. Inner exception javlja 'sqlconnection timeout' (puca, bukvalno, na 'konekcija.Open()'). Da pokusam da budem jos precizniji u opisu koda (odnosno, problema): Code: Dim bsnEntity_1 As BsnEntity_1 Dim bsnEntity_2 As BsnEntity_2 Try Using scope As New TransactionScope() bsnEntity_1.InsertIntoTable_1(par1, par2, ...) 'u gornjem pozivu se: otvara sql konekcija, pozove uskladistena procedura i zatvori sql konekcija 'sve funkcionise ispravno int count = bsnEntity_1.SelectFromTable_1() 'i u gornjem pozivu se: otvara sql konekcija, pozove uskladistena procedura i zatvori sql konekcija 'program 'puca' prilikom otvaranja sql konekcije u okviru gornjeg poziva 'outer exception: 'operation is not valid for the state of the transaction' 'inner exception: 'sqlconnection timeout' bsnEntity_2.UpdateTable_2 (count) ... End Using catch ... end try Moze li neko da mi pomogne 'sta ne valja u ovoj koncepciji' ? Na google-u ima dosta prijava problema na ovu temu (da je tako krstim: 'handling multiple sql connections in one transaction scope'), ali ja nisam uspio da nadjem rjesenje za svoj problem. Odnosno, rjesenje je da se sve drzi u okviru jedne sql konekcije. To bi mi znatno poremetilo postojecu koncepciju (kao sto sam napisao, svaki metod vodi racuna o otvaranju/zatvaranju konekcije) ... Ili je, mozda, TransactionScope korektno primijenjen, a otvaranje sql konekcije 'puca' zbog nekog drugog razloga ? Nadam se da sam korektno (percizno) opisao problem - zahvalan za svaki prijedlog, pomoc, sugestiju ... |