Merhaba üstadım, örnek olarak SQL Server'ı verelim; diyelim ki döngü ile SQL Server üzerindeki 3 adet sp çalıştıracak olsun. 1nci sp isteğini server'a gönderdik, bağlantımız var; ikinciyi gönderdik bağlantımız var; 3üncüyü gönderir iken bağlantımız koptu. Bu durumda; 1 ve 2nci sp'ler Sql server tarafında execute olmaya devam ediyorlardır. Diyelim ki döngümüzden önce bir transaction başlattık; bu durumda bağlantımız koptuktan sonra transaction'ı rollback yada commit etme imkanımız olmayacak. Sql Server'da o transaction açık olarak kalacak(bu da başka sorunlara neden olabilir ya neyse konu bu değil); eğer Sql Server isteği gönderen connection'ın artık var olmadığını anlayabilir ise transaction'u rollback etmeye çalışacak ama transaction isimsiz olduğu(savepoint) için hangisini rollback edeceğini yada edip etmemesi gerektiğini bilemeyecek. Eğer şanslı isek Sql Server transaction'ı rollback edecek. Beklenen ve genelde olan durum bu elbette. Lâkin bir transaction'da başlatılmamış olabilir.mrmarman yazdı:@thelvaci hocam haklısın ama Android yakasında olduğunu varsayalım o da sıkıntı. Gerçi konumuz android ile alakalı mı ne kadar alakalı sadece bir beyin fırtınası için yazıyorum.
O zaman WebServices destekli ara bir sunucu veya web sitesi eklemek zorunluluğu velhasıl benzer sıkıntı onda da olacaktır.
Veri gönderimi sırasında hata olursa zaten sistem yakalamıyor mu ? Transaction %100 tamam olunca veritabanına düşüyor. Aksi bir durum ile karşılaşmadım ama risk görüyorsanız ikinci bir kontrol ile bu durum kontrol altına alınabilir diye değerlendiriyorum.
Yanlış mı düşünüyorum ?
Bunu kısaca şu şekilde deneyebilirsiniz, network ortamında pek çok makinanız vardır. Uzak bir sql server üzerinde bir sp yazın içinde WAITFOR ile 10 sn. bekleyen bir kodunuz olsun, hemen ardından bir tabloya kayıt girsin sp'niz. Kendi bilgisayarınızdan uzak sunucuya bağlanın ve bu sp'yi çalıştırın, ardından da makinanızın network bağlantısını kesin. Göreceksiniz ki; sql server sp'yi execute etmeye devam edecek. Server'a iş emri gitti ise o emir tamamlanacak. Tabii bu gibi durumlarda da hele hele transactional bir aktarım kullanılmıyor ise; neler olabileceğini hayal edersiniz
Bu aktarım mevzuları gerçekten de çok derin; M$ boşuna replication diye bir mekanizma çıkartmamış ama onun da kendi içinde bir dünya sıkıntısı ve zorlukları mevcut. Arkadaşımıza önerdiğim hususu inceleyebilir ise MSMQ'nun bu tarz işler için biçilmiş kaftan olduğunu gözlemleyebilir sanıyorum.