分散式系統常面臨連線不穩、尖峰負載、跨平台整合等挑戰。MSMQ 提供三大核心優勢:
| Binding | 適用場景 | 程式模型 |
|---|---|---|
NetMsmqBinding | WCF 端點間通訊,功能與一般 binding 一致 | 標準 Service Contract / Data Contract |
MsmqIntegrationBinding | 整合現有非 WCF MSMQ 應用 | Operation 僅接受 MsmqMessage<T> 參數 |



[DataContract] [KnownType(typeof(OrderItem))]
public class Order { /* OrderNo, OrderDate, Supplier, Items... */ }
[DataContract] public class OrderItem { /* ProductID, Name, Price, Qty */ }
[ServiceContract]
public interface IOrderProcessor
{
[OperationContract(IsOneWay = true)]
void Submit(Order order);
}
public class OrderProcessorService : IOrderProcessor
{
public void Submit(Order order) => Console.WriteLine($"收到訂單 {order.OrderNo}");
}
// App.config 關鍵:msmqAuthenticationMode="None" 方便本機測試
// Program.cs
string path = @".\private$\orders";
if (!MessageQueue.Exists(path)) MessageQueue.Create(path, true); // true = 支援交易
using (var host = new ServiceHost(typeof(OrderProcessorService)))
{
host.Open(); Console.Read();
}
using (var scope = new TransactionScope(TransactionScopeOption.Required))
{
channel.Submit(order); // 送入佇列
scope.Complete(); // 交易提交,訊息才真正進入目的佇列
}
Host 啟動後監聽,Client 送出訂單,主控台輸出:

exactlyOnce="false":非精確一次傳遞 (需 MSMQ 3.0+ 且啟用 AD 才支援 exactlyOnce)。msmqAuthenticationMode="None" + msmqProtectionLevel="None":開發環境免去 AD 依賴。.\private$\queueName (本機私有佇列)。MSMQ 為 WCF 提供了脫機、異步、高可靠的傳輸通道。搭配 NetMsmqBinding 幾乎零學習成本即可接入現有 WCF 開發流程,是構建鬆耦合、高擴展性分散式系統的利器。