Tôi có một quy trình đơn giản đọc từ một hàng đợi, xử lý các thông báo và kết quả đầu ra cho một thư khác. Tôi đang cố gắng để bọc này chuyển giao trong một TransactionScope, như vậy mà cả hai đọc từ hàng đợi đầu vào, và ghi vào hàng đợi đầu ra xảy ra trong cùng một giao dịch.TransactionScope nâng lên MSDTC khi gửi giữa các hàng đợi?
Tuy nhiên, có vẻ như MSDTC đang được sử dụng để thực hiện giao dịch này và kết quả là nó chậm hơn đáng kể so với sử dụng MessageQueueTransaction chuẩn. Điều này có nên xảy ra không? Tôi đã ấn tượng rằng TransactionScope sẽ chỉ nâng cấp lên một giao dịch bên ngoài nếu phạm vi liên quan, ví dụ, một hàng đợi tin nhắn đọc và một cơ sở dữ liệu viết, nhưng không phải nếu chỉ có nhiều hàng đợi tin nhắn có liên quan.
Cảm ơn.
EDIT: Đây là tất cả trên máy tính xách tay của tôi vào lúc này, vì vậy tôi chắc chắn rằng không có máy móc nào khác có liên quan.
Tôi cũng muốn thêm rằng tôi xác nhận rằng giao dịch leo thang đang diễn ra bằng cách kiểm tra trong phần '' Dịch vụ thành phần '' của Windows (tức là DTC/Danh sách giao dịch cục bộ). Tôi có thể thấy các giao dịch vào và rời khỏi màn hình này, điều mà tôi giả định có nghĩa là giao dịch đã được leo thang. Tôi có sai khi giả định điều này không?
CHỈNH SỬA 2: Tôi nhận được cùng một hành vi khi tôi chỉ viết vào một hàng đợi duy nhất! tức là
using (var ts = new TransactionScope())
{
using (var q = new MessageQueue("..."))
{
/* write data */
}
ts.Complete();
}
Tôi có thể thấy DTC đang được sử dụng với ở trên, mặc dù hàng đợi đang ở trên máy cục bộ.
Hàng đợi liên quan đến ứng dụng ở đâu? Cùng một máy? Máy khác nhau? –
Bạn có đang sử dụng máy chủ được nhóm không? –
Không, đây là tất cả nội bộ trên máy tính xách tay của tôi vào lúc này. Tôi đã cập nhật câu hỏi của tôi với một số làm rõ. – Barguast