Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

TransactionScope - vise konekcija u okviru jednog TransactionScope-a

[es] :: .NET :: TransactionScope - vise konekcija u okviru jednog TransactionScope-a

[ Pregleda: 2095 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nikitaGradov
Beograd

Član broj: 223576
Poruke: 206
95.180.68.*



+3 Profil

icon TransactionScope - vise konekcija u okviru jednog TransactionScope-a05.10.2014. u 13:53 - pre 116 meseci
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 ...

Programming is fun, but writing good software is hard ...
 
Odgovor na temu

--ja--

Član broj: 4387
Poruke: 232
*.adsl.net.t-com.hr.

ICQ: 132872590


+3 Profil

icon Re: TransactionScope - vise konekcija u okviru jednog TransactionScope-a05.10.2014. u 19:35 - pre 116 meseci
Jel ti DTC ispravno podešen?
http://www.dropbox.com/referrals/NTQ0MTI2NDc5
https://www.agronomija.info/
Failure is not an option. It comes bundled with your Microsoft product.
 
Odgovor na temu

nikitaGradov
Beograd

Član broj: 223576
Poruke: 206
95.180.68.*



+3 Profil

icon Re: TransactionScope - vise konekcija u okviru jednog TransactionScope-a05.10.2014. u 20:52 - pre 116 meseci
Nas admin mi je rekao da je na serveru (ponavljam 2008R2) DTC pokrenut. Nemam admin pristup serveru, pa i ne znam kako ga treba podesiti (i ne mogu to ni da provjerim).
Ja sam pokrenuo DTC na svom klijentu (Windows 7).

Na Google-u pise da je od verzije 2008 podrzano vise konekcija u okviru jednog transaction scope-a -> ja sam to razumio tako da to radi i bez 'podignutog' DTC-a - jesam li u pravu ?
Programming is fun, but writing good software is hard ...
 
Odgovor na temu

--ja--

Član broj: 4387
Poruke: 232
31.45.244.*

ICQ: 132872590


+3 Profil

icon Re: TransactionScope - vise konekcija u okviru jednog TransactionScope-a05.10.2014. u 21:30 - pre 116 meseci
U slučaju koji si opisao gore si u pravu.

Od Sql2008 više konekcija unutar istog TransactionScope-a neće uzrokovati DTC escalation ako te konekcije nisu ugniježđene (a u tvom slučaju nisu) i ako su pri tom sve konekcije prema istoj bazi.

Našao sam članke: ovdje i ovdje

Ipak, kad god sam imao problem vezan uz transakcije, uvijek je uzrok bio DTC tako da provjeri još jednom da ti ga slučajno ne okida. Provjeri u Component services -> Comuters -> My Computer -> Distributed Transaction Coordinator -> Local DTC -> Transaction statistics eskalira li transakcija kad se vrti tvoj kod.
Ako da, provjeri firewall, provjeri lokalne postavke i vidi zašto ne prolazi... Kod mene to recimo ovako izgleda:

http://www.dropbox.com/referrals/NTQ0MTI2NDc5
https://www.agronomija.info/
Failure is not an option. It comes bundled with your Microsoft product.
Prikačeni fajlovi
 
Odgovor na temu

[es] :: .NET :: TransactionScope - vise konekcija u okviru jednog TransactionScope-a

[ Pregleda: 2095 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.