2008-08-11 96 views
84

Đây có phải là câu hỏi hợp lệ không? Tôi có một ứng dụng .NET Windows đang sử dụng MSTDC và nó đang ném một ngoại lệ:Làm cách nào để bật MSDTC trên SQL Server?

System.Transactions.TransactionManagerCommunicationException: Truy cập mạng cho Trình quản lý giao dịch phân phối (MSDTC) đã bị tắt. Vui lòng bật DTC cho truy cập mạng trong cấu hình bảo mật cho MSDTC bằng công cụ Quản trị dịch vụ thành phần ---> System.Runtime.InteropServices.COMException (0x8004D024): Trình quản lý giao dịch đã tắt hỗ trợ cho giao dịch từ xa/mạng . (Ngoại lệ từ HRESULT: 0x8004D024) tại System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction (UInt32 propgationTokenSize, Byte [] propgationToken, IntPtr managedIdentifier, Guid & transactionIdentifier, OletxTransactionIsolationLevel & IsolationLevel, ITransactionShim & transactionShim) ....

Tôi đã theo dõi the Kbalertz guide to enable MSDTC trên PC mà ứng dụng được cài đặt nhưng lỗi vẫn xảy ra.

Tôi đã tự hỏi đây có phải là vấn đề về cơ sở dữ liệu không? Nếu vậy, làm thế nào tôi có thể giải quyết nó?

+0

Nếu các giải pháp được đề cập không giải quyết được vấn đề, hãy kiểm tra [liên kết này] (http://stackoverflow.com/questions/10346367/mvc-3-the-msdtc-transact ion-manager-was-cannot-to-pull-the-giao dịch-từ-th) –

Trả lời

3

MSDTC phải được bật trên cả hai hệ thống, cả máy chủ và ứng dụng khách.
Ngoài ra, hãy đảm bảo rằng không có tường lửa giữa các hệ thống chặn RPC.
DTCTest là một ứng dụng litt đẹp giúp bạn khắc phục sự cố bất kỳ vấn đề nào khác.

+0

http://ww2.sqldev.net/?folio=7POYGN0G2 không tìm thấy DTCTest. – Kiquenet

93

Thậm chí bạn có cần MSDTC không? Sự leo thang mà bạn đang gặp phải thường do gây ra nhiều kết nối trong một TransactionScope duy nhất.

Nếu bạn cần nó, bạn cần phải kích hoạt nó như được nêu trong thông báo lỗi. Trên XP:

  • Đến Administrative Tools -> Component Services
  • Mở rộng Component Services -> Máy tính ->
  • Kích chuột phải -> Properties -> MSDTC tab
  • Nhấn nút Security Configuration
+2

Cũng trong cửa sổ tường lửa Tôi đã mở cổng 135 TCP và thêm c: \ windows \ msdtc.exe như là một ngoại lệ – Sameer

+18

Cảm ơn nhận xét về lỗi được gây ra bằng cách tạo nhiều kết nối trong một TransactionScope duy nhất. Tôi đã nhận được lỗi và đó chính xác là vấn đề.Tôi không muốn sử dụng MSDTC, vì vậy tôi đã tìm thấy kết nối mới không hợp lệ và sử dụng lại kết nối hiện có. Cảm ơn! –

+10

Tôi đang ở trên cửa sổ 7 và 8 và chỉ có phần "Điều phối viên mặc định". Tôi có thể lấy cấu hình bảo mật mà bạn đang nói đến ở đâu? – qdev76

4

@ Dan,

tôi không cần kích hoạt cho MSDTC giao dịch hoạt động?

Chỉ giao dịch được phân phối - Những giao dịch liên quan đến nhiều kết nối. Hãy chắc chắn rằng bạn chỉ đang mở một kết nối duy nhất trong giao dịch và nó sẽ không leo thang - Hiệu suất cũng sẽ tốt hơn nhiều.

+0

Tôi có cần bật msdtc để giao dịch hoạt động không? Dù bằng cách nào, nhiều kết nối không được thực hiện theo như tôi biết. Tôi đã chạy các bước trên máy khách, bạn có nói rằng tôi cũng nên thực hiện các bước trên máy chủ cơ sở dữ liệu không? – Dan

+0

@Dan, bạn không bắt buộc phải bật DTC nếu bạn đang sử dụng các giao dịch ado.net. Bạn được yêu cầu bật MSDTC trên máy chủ chỉ khi bạn đang sử dụng các giao dịch Phân phối – Niraj

17

tôi đã tìm thấy rằng cách tốt nhất để gỡ lỗi là sử dụng công cụ microsoft gọi DTCPing

  1. Sao chép các tập tin cho cả hai máy chủ (DB) và máy khách (máy chủ ứng dụng/khách hàng pc)
    • Bắt đầu nó ở máy chủ và máy khách
    • tại server: điền vào NetBIOS khách hàng tên máy tính và cố gắng thiết lập một kết nối DTC
    • Khởi động lại cả hai ứng dụng.
    • Tại client: điền vào NetBIOS máy chủ tên máy tính và cố gắng thiết lập một kết nối DTC

Tôi đã có thỏa thuận giá vé của tôi về các vấn đề trong mạng công ty cũ của chúng tôi, và tôi đã có một vài lời khuyên:

  • nếu bạn nhận được thông báo lỗi "GetHostByName thất bại" nó có nghĩa là máy tính không thể tìm thấy máy tính khác bởi nó tên NetBIOS. Các máy chủ có thể ví dụ giải quyết và ping khách hàng, nhưng điều đó hoạt động trên một cấp độ DNS. Không ở cấp độ tra cứu trên mạng. Sử dụng các máy chủ WINS hoặc thay đổi LMHOST (bẩn) sẽ giải quyết vấn đề này.
  • nếu bạn gặp lỗi "Đã từ chối", cài đặt bảo mật không khớp. Bạn nên so sánh tab bảo mật cho msdtc và nhận máy chủ và ứng dụng khách khớp. Một điều khác để xem xét là giá trị RestrictRemoteClients. Tùy thuộc vào phiên bản hệ điều hành của bạn và quan trọng hơn là Service Pack, giá trị này có thể khác nhau.
  • vấn đề kết nối khác:
    • Các bức tường lửa giữa máy chủ và máy khách phải cho phép giao tiếp qua cổng 135. Và quan trọng hơn là kết nối có thể được bắt đầu từ cả hai trang web (Tôi đã có rất nhiều vấn đề với những người tường lửa trong công ty của tôi bởi vì họ cho rằng chỉ máy chủ sẽ mở kết nối vào cổng đó)
    • Giao thức trả về một cổng ngẫu nhiên để kết nối với giao tiếp giao dịch thực. Firewall mọi người không thích điều đó, họ thích hạn chế các cổng vào một phạm vi nhất định. Bạn có thể hạn chế việc tạo cổng động RPC cho một phạm vi nhất định bằng cách sử dụng các phím như được mô tả trong How to configure RPC dynamic port allocation to work with firewalls.

Theo kinh nghiệm của tôi, nếu DTCPing có thể thiết lập một kết nối DTC khởi xướng từ khách hàng và bắt đầu từ máy chủ, giao dịch của bạn không phải là vấn đề nữa.

4

Cũng có thể xem here về cách bật MSDTC từ các dịch vụ của bảng điều khiển.msc.

Trên máy chủ có trình kích hoạt, bạn cần bật dịch vụ MSDTC . Bạn có thể làm điều này bằng cách nhấp vào BẮT ĐẦU> CÀI ĐẶT> CONTROL PANEL> CÔNG CỤ HÀNH CHÍNH> DỊCH VỤ. Tìm dịch vụ có tên 'Điều phối viên giao dịch phân tán' và BỔ SUNG PHẢI (trên đó và chọn )> Bắt đầu.

90

Sử dụng này cho Windows Server 2008 R2 và Windows Server 2012 R2

  1. Bấm Bắt đầu, nhấp Run, gõ dcomcnfg và sau đó nhấp vào OK để mở Component Services.

  2. Trong cây giao diện điều khiển, bấm vào để mở rộng Component Services, bấm vào để mở rộng Computers, bấm vào để mở rộng My Computer, bấm vào để mở rộng Transaction Coordinator Distributed và sau đó nhấp vào DTC Local.

  3. Nhấp chuột phải Local DTC và nhấp Thuộc tính để hiển thị DTC Thuộc tính hộp thoại Local.

  4. Nhấp vào tab Bảo mật.

  5. Dấu kiểm "Kiểm tra DTC mạng".

  6. Cuối cùng kiểm tra dấu "Cho phép Inbound""Allow Outbound" hộp kiểm.

  7. Bấm Áp dụng, OK.

  8. Thông báo sẽ bật lên về khởi động lại dịch vụ.

  9. Bấm OK và đó là tất cả.

tham khảo: https://msdn.microsoft.com/en-us/library/dd327979.aspx

Lưu ý: Đôi khi các bức tường lửa mạng trên máy tính địa phương hoặc Server có thể ngắt kết nối của bạn do đó hãy chắc chắn rằng bạn tạo các quy tắc để "Cho phép Inbound""Allow Kết nối " gửi đi" c:\windows\msdtc.exe

+0

Hoạt động cho Windows Server 2012 R2, quá. Cảm ơn bạn đã hướng dẫn rõ ràng. Sẽ không bao giờ tìm thấy điều này một mình! – jonazu

+0

@jonazu bây giờ tôi đã cập nhật câu trả lời cho Windows Server 2012 R2 quá :) –

+0

Công việc tốt ShivSingh! –

Các vấn đề liên quan