首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取Stream对象而不使用它

读取Stream对象而不使用它
EN

Stack Overflow用户
提问于 2012-02-07 01:16:19
回答 2查看 3K关注 0票数 1

我使用XML-RPC.NET (来自http://www.xml-rpc.net/)和HttpListener方法来侦听特定网络端口上的XML-RPC通信并对其进行响应。

传入的请求主体可以通过HttpListenerContextInstance.Request.InputStream流对象进行访问:

代码语言:javascript
复制
HttpListener hlListener = new HttpListener();
HttpListenerContext hlcContext = hlListener.GetContext();
// hlcContext.Request.InputStream contains what I want

流可以从hlcContext.Request.InputStream访问,但是这个流是不可查找的,所以我不能读取它/显示它,然后返回到它的开头,这样XML-RPC.NET库就可以根据需要使用它。一旦它被读取,它就会被消耗,并且不能被重新读取。

我知道处理这种情况的一种方法是将它从流转换成支持查找的MemoryStream,然而,我不知道有什么方法可以这样做,这样XML-RPC.NET就可以继续使用MemoryStream而不是流。仅仅将流复制到MemoryStream似乎会消耗流,使其在超过该点后不可用:

代码语言:javascript
复制
// hlcContext.Request.InputStream is currently filled
MemoryStream msInput = new MemoryStream();
hlcContext.Request.InputStream.CopyTo(msInput);
byte[] byteInput = msInput.ToArray();
// hlcContext.Request.InputStream is now empty and XML-RPC.NET can no longer use it :(

如何读取Stream,以便将其存储在字符串中,并使Stream在该点之后继续与XML-RPC.NET一起工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-07 02:29:37

如果你不能找到一种合法的方式,这里有一个将流设置为Request.InputStream的方法(作为最后的手段)

代码语言:javascript
复制
MemoryStream msInput = new MemoryStream();
hlcContext.Request.InputStream.CopyTo(msInput);
byte[] byteInput = msInput.ToArray();
msInput.Seek(0, SeekOrigin.Begin);

request.GetType().InvokeMember("m_RequestStream", BindingFlags.SetField | BindingFlags.Instance | BindingFlags.NonPublic, null, request, new object[] { msInput });

现在您可以自由地使用byteInput

票数 2
EN

Stack Overflow用户

发布于 2012-02-07 01:30:54

这应该与支持查找的流一起工作(CanSeek == true)。

代码语言:javascript
复制
MemoryStream msInput = new MemoryStream();
var preCopyPosition = hlcContext.Request.InputStream.Position;

hlcContext.Request.InputStream.CopyTo(msInput);
byte[] byteInput = msInput.ToArray();

// Go back to pre-copy state
hlcContext.Request.InputStream.Position = preCopyPosition;
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9164194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档