MessageBodyStream を MemoryStream (からByte[])に変換する

WCFサービスから MemoryStream を受け取ると、クライアント側では MessageBodyStream 型で取れてくる。
インターフェースは同じ Stream なんだけど、 MessageBodyStream を直接 MemoryStream にはキャストできない。(最終的にはHTTP Responseにセットしたいので、Byte にしたい)

なので、 MessageBodyStream をぐるぐる回しながら読み取って MemoryStream に入れ直し、最終的にToArray() で Byte を作っていたんだけど。

.NET4 から CopyTOなるメソッドが追加されていたことを知る。
c# - Creating a byte array from a stream - Stack Overflow

public static byte[] ReadFully(Stream input)
{
    using (MemoryStream ms = new MemoryStream())
    {
        input.CopyTo(ms);
        return ms.ToArray();
    }
}

だいぶスッキリした。痒い所に手が届く.NET。