2009-06-18 35 views
7

Làm cách nào để biết liệu hàng đợi tin nhắn từ xa exists? Tài liệu nói rằng phương thức "Exists" không hoạt động đối với các máy từ xa.Kiểm tra xem một MessageQueue từ xa có tồn tại hay không (sử dụng C#)

Sau đây là không hợp lệ (Tôi biết con đường đợi là chính xác kể từ khi tôi có thể gửi tin nhắn cho hàng đợi):

 
if (!MessageQueue.Exists(@"FormatName:Direct=TCP:192.168.2.58\Private$\MyQueue")) 
    throw new InvalidOperationException("Queue does not exist"); 

Vấn đề là gửi một thông điệp tới một địa chỉ mạng mà không làm có một hàng đợi nghe đằng sau nó không gây ra một ngoại lệ. Có một ngoại lệ được ném cho một địa chỉ hàng đợi không hợp lệ là rất quan trọng đối với ứng dụng của chúng tôi.

Trả lời

3

Có một bài viết về vấn đề này: cách tiếp cận khác

Frank là để tận dụng các tính năng khác mà MSMQ cung cấp, chẳng hạn như tin nhắn báo nhận phủ định với hàng đợi chính quyền.

gì nên xảy ra là một trong hai:

  • thông báo sẽ được gửi thành công đến hàng đợi đến
  • một sự thừa nhận tiêu cực (NACK) sẽ được trả lại hàng đợi quản lý với một lớp học của "The hàng đợi đích không tồn tại . " (MQMSG_CLASS_NACK_BAD_DST_Q) Hoặc bạn có thể sử dụng ghi nhật ký nguồn âm và, khi không phân phối, sẽ thấy cùng một lớp NACK trong hệ thống "Thư chết" tương ứng xếp hàng.

Nói tóm lại, không kiểm tra xem hàng đợi tồn tại nhưng thay vì xử lý các phi giao hàng của thông điệp nó nên bật ra rằng hàng đợi không tồn tại.

http://blogs.msdn.com/johnbreakwell/archive/2008/07/31/checking-if-msmq-queues-exist-is-hard-work-so-should-you-bother.aspx

0

Điều gì sẽ xảy ra nếu điều khiển từ xa được kiểm soát bởi bên thứ ba mà bạn không có quyền kiểm soát?

Bạn nên có một số loại kiểm tra thời gian chờ thay vì dựa vào thông tin từ xa.

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