Chỉ cần để có được ra khỏi hộp cho một thời điểm, bạn có nghĩ về việc sử dụng WCF với MSMQ không? Tôi không chắc rằng tôi hoàn toàn hiểu bạn là kiến trúc, nhưng có vẻ như khách hàng của API phải quay lên một quy trình khác lưu trữ API. Có thể có sự cố thời gian giữa thời điểm bạn bắt đầu máy chủ API và khi khách hàng cố thực hiện cuộc gọi. Microsoft gần đây đã từ chối .NET Remoting (cũng như tất cả các công nghệ truyền thông trước đây của họ như các dịch vụ web ASMX) như là di sản, và rất khuyến khích các nhà phát triển chuyển sang nền tảng WCF.
Nếu bạn sử dụng WCF với MSMQ, bạn không nên gặp sự cố về thời gian. Ứng dụng khách của bạn có thể thả tin nhắn trong một hàng đợi lâu bất kể máy chủ API có đang chạy hay không. Các máy chủ API có thể được bắt đầu bất cứ lúc nào, và nó sẽ nhận và xử lý bất kỳ tin nhắn chờ đợi trong hàng đợi. Ngay cả khi bạn vẫn còn ứng dụng máy khách khởi động máy chủ API, vấn đề về thời gian sẽ không còn là vấn đề bởi vì bạn đang sử dụng xếp hàng để chuyển các thư thay vì .NET Remoting. WCF cung cấp một wrapper đẹp, thuận tiện, dễ sử dụng xung quanh MSMQ, vì vậy rào cản để vào là tương đối thấp.
Điều tuyệt vời khác khi sử dụng WCF trên .NET Remoting là bạn có thể dễ dàng di chuyển máy chủ API đến một máy chủ vật lý khác mà không phải thay đổi (các) ứng dụng khách. Bạn thậm chí có thể chuyển sang một nền tảng xếp hàng khác nếu bạn muốn (chẳng hạn như RabbitMQ trên AMQP), mà không thay đổi ứng dụng máy khách hoặc API. WCF xử lý tất cả các tương tác đó cho bạn, cung cấp một sự tách biệt sạch hơn và truyền thông đáng tin cậy hơn giữa ứng dụng khách và máy chủ API của bạn.
Nếu di chuyển đến WCF không phải là một tùy chọn, bạn có thể đặt cổng rõ ràng bằng .NET Remoting. Tôi không chắc chắn làm thế nào bạn đang cấu hình máy chủ API của bạn, nhưng URL cho bất kỳ đối tượng truy cập từ xa được thường là dưới hình thức:
tcp://<hostname>[:<port>]/<object>
Nếu bạn thêm các cổng, sau đó bạn sẽ có thể sử dụng giải pháp Abhijeet để xác định xem cổng có mở hay không. Bạn sẽ không nhận được sự kết nối lỏng lẻo và các lợi ích truyền thông đáng tin cậy của WCF, nhưng nó chắc chắn sẽ ít hoạt động hơn. ;)
Jon Skeet! Bạn phải biết câu trả lời! = [ – snicker