Я столкнулся с той же проблемой при использовании служб 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.
}