2012-01-31 20 views
10

Từ những gì tôi đang đọc, để sử dụng TransactionScope trong .NET, bạn cần dịch vụ phối hợp giao dịch phân tán trong Windows để chạy. Tôi có dịch vụ đó đã tắt và ứng dụng của tôi có vẻ đang chạy cùng một giao dịch và không có vấn đề gì.Giao dịch có cần dịch vụ DTC không?

Tôi có thiếu gì đó không? Làm cách nào để có thể hoạt động? Tôi đang chạy Windows 7 và chạy các ứng dụng web tắt VisualStudio 2010.

+1

DTC là cần thiết, khi giao dịch của bạn cần vượt qua một số ranh giới nhất định. Ví dụ, tôi tin rằng bạn cần nó cho một giao dịch trên hai cơ sở dữ liệu trên máy địa phương, hoặc để leo thang giao dịch của bạn đến một máy chủ từ xa. Tôi không có bằng chứng cứng/liên kết của nó vì vậy tôi sẽ chỉ để lại điều này như là một bình luận cho bạn để điều tra thay vì như một câu trả lời. Hy vọng nó giúp. – Smudge202

Trả lời

10

Các phiên bản cửa sổ hiện đại khác có phiên bản DTC nhỏ trong hạt nhân. Nó không được phân phối nhưng sử dụng cùng một API - nhưng nó chỉ có thể xử lý một ressource cho mỗi phạm vi giao dịch.

TransactionScope sử dụng lúc bắt đầu, sau đó "quảng bá" giao dịch cho DTC thực tại thời điểm tài nguyên thứ hai được thêm vào (tài nguyên trong trường hợp của bạn là kết nối cơ sở dữ liệu). Vì vậy, miễn là trường hợp sử dụng của bạn là rất nhiều, bạn tránh chi phí (cao) của phần DISTRIBUTED của DTC và có thể hoạt động mà không cần dịch vụ đang chạy.

Thông tin thêm về các giao dịch Managger Kernel có thể được tìm thấy tại http://en.wikipedia.org/wiki/Kernel_Transaction_Manager

MS thêm nó cũng vì NTFS có giao dịch và nó cần thiết để đảm bảo một DTC là show hiện hữu.

http://www.codeguru.com/cpp/article.php/c18309/

8

MSDTC đi vào vở kịch chỉ nếu bạn có nhiều hơn một giao dịch với các kết nối khác nhau

SO, câu trả lời là:

Nó phụ thuộc!

  • Nếu bạn sử dụng 1 TranScope mỗi 1 kết nối - sau đó NO
  • Nếu bạn sử dụng 1 TranScope mỗi hơn 1 kết nối - sau đó YES
  • Nếu bạn đã tạo đối tượng TransactionScope đòi hỏi giao dịch phân tán - sau đó YES
+1

Thật sao? Nếu bạn nói rõ ràng, hơn trong một TranScope bạn sử dụng nhiều hơn một kết nối, sau đó tôi cập nhật câu trả lời, khác - có vẻ như bạn sử dụng 1 kết nối cho mỗi phạm vi giao dịch - kịch bản này không liên quan đến MSDTC –