WCFサービスを使用しているときに、これと同じ問題が発生しました。POSTメッセージの内容を取得する必要がStream
あり、メッセージの本文の内容を取得するためにメソッドで引数を使用していました。ストリームを取得したら、その内容を一度に読みたいと思い、必要なバイト配列のサイズを知る必要がありました。したがって、配列の割り当てではSystem.IO.Stream.Length
、OPによって言及された例外を呼び出して取得します。ストリーム全体の内容を読み取ることができるように、ストリームの長さを知る必要がある理由はありますか?
を使用して、ストリームの内容全体を文字列に実際に読み取ることができますSystem.IO.StreamReader
。それでもストリームのサイズを知る必要がある場合は、結果の文字列の長さを取得できます。この問題をどのように解決したかを示すコードは次のとおりです。
[OperationContract]
[WebInvoke(UriTemplate = "authorization")]
public Stream authorization(Stream body)
{
// Obtain the token from the body
StreamReader bodyReader = new StreamReader(body);
string bodyString = bodyReader.ReadToEnd();
int length = bodyString.Length; // (If you still need this.)
// Do whatever you want to do with the body contents here.
}