[C#.NET][WCF] 使用 Message Header 擴充 MSMQ 應用程式功能
WCF 允許我們自訂Header
發送端:OperationContext.Current.OutgoingMessageHeaders
接收端:OperationContext.Current.IncomingMessageHeaders
情境:
因需求變更,所以要增加功能,在不變更合約的情況之下,可以使用此方式增加功能
使用方式:
發送端:
把要處理的Header 放到 OperationContextScope 區段內
using (new OperationContextScope(channel as IContextChannel))
{
OperationContext.Current.OutgoingMessageHeaders.Add(
header.GetUntypedHeader("header name", "namespace"));
channel.Submit(order);
}
接收端:
OperationContext.Current.IncomingMessageHeaders.GetHeader<string>("header name","namespace");
注意事項
- 適用維護階段,若是在設計階段,應避免此方式
- 適用與業務邏輯無關的欄位擴充,若有關業務邏輯,應該痛一次,以免造成日後維護困難
- 利用此方式擴充欄位,Header 與 Body 可能會不在同一個Thread,造成訊息斷裂,請參考以下連結,可以看出這需要處理Thread
http://msdn.microsoft.com/zh-tw/library/system.servicemodel.operationcontextscope%28v=vs.110%29.aspx
發送端畫面
接收端畫面,很明顯的資料順序有問題了
結論:
擴充欄位的方式,可能會造成日後維護的困難,額外的執行緒處理,我可能不會用它
範例:
https://dotblogsamples.codeplex.com/SourceControl/latest#Sample.WCF.MSMQ.MessageHeader/
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET