[C#.NET][WCF] 使用 Message Header 擴充 MSMQ 應用程式功能

[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);
}

image

接收端:

OperationContext.Current.IncomingMessageHeaders.GetHeader<string>("header name","namespace");


 

image

 

注意事項

  • 適用維護階段,若是在設計階段,應避免此方式
  • 適用與業務邏輯無關的欄位擴充,若有關業務邏輯,應該痛一次,以免造成日後維護困難
  • 利用此方式擴充欄位,Header 與 Body 可能會不在同一個Thread,造成訊息斷裂,請參考以下連結,可以看出這需要處理Thread
    http://msdn.microsoft.com/zh-tw/library/system.servicemodel.operationcontextscope%28v=vs.110%29.aspx
    發送端畫面
    image

    接收端畫面,很明顯的資料順序有問題了
    image

 

結論:

擴充欄位的方式,可能會造成日後維護的困難,額外的執行緒處理,我可能不會用它

 

範例:

https://dotblogsamples.codeplex.com/SourceControl/latest#Sample.WCF.MSMQ.MessageHeader/

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo