有時需從現有訊息建立緩衝模式拷貝。Message.CreateBufferedCopy(maxBufferSize) 回傳 MessageBuffer,呼叫其 CreateMessage() 產生新訊息(狀態 Created)。過程中原訊息狀態從 Created 變為 Copied。若原訊息狀態非 Created,拋 InvalidOperationException。
Message msg = Message.CreateMessage(MessageVersion.Default, "urn:SomeAction", "Something in the body");
MessageBuffer buffer = msg.CreateBufferedCopy(Int32.MaxValue);
Message msgNew = buffer.CreateMessage();
// msg.State = Copied, msgNew.State = Created
應用場景:PeerChannel 等多參與者場景,單一訊息複製多份發送至不同節點。
Message 實作 IDisposable 並定義 Close()。設計上隱藏 Dispose(需轉型呼叫),公開 Close。內部 Dispose 呼叫 Close,效果相同。可用 using 區塊(隱式呼叫 Dispose)。
作者認為此設計不當:Framework 設計規範建議明確實作介面,罕見公開 Close 卻隱藏 Dispose。開發者期望同時見到兩者。雖為避免混淆,但反而增加困惑。
Message 是 WCF 通訊基本單位,雖常隱於幕後但核心地位不變