我在使用 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.
}