我使用XML-RPC.NET(從http://www.xml-rpc.net/)和HttpListener方法在特定網絡端口上偵聽XML-RPC通信並對其進行響應。讀取Stream對象而不使用它
附帶在請求的主體是通過HttpListenerContextInstance.Request.InputStream
流對象可訪問:
HttpListener hlListener = new HttpListener();
HttpListenerContext hlcContext = hlListener.GetContext();
// hlcContext.Request.InputStream contains what I want
的流可以從hlcContext.Request.InputStream
被訪問但該流處於不可搜索,所以我不能讀取它/顯示它然後回溯到它的開頭,以便XML-RPC.NET庫可以根據需要使用它。一旦它被讀取,它就會被使用並且不能被重新讀取。
我知道處理這種情況的一種方法是將其從Stream轉換爲支持尋找的MemoryStream,但是,我不知道如何執行此操作以便XML-RPC.NET繼續使用MemoryStream而不是Stream。僅僅複製流至一個MemoryStream似乎消耗流使其無法使用過去的這一點:
// 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 :(
我怎樣才能從流中讀取,這樣我可以將其存儲在一個字符串,並有流繼續工作之後的XML-RPC.NET?
如何你是否將流提供給XML-RPC.NET?我沒有看到你的示例代碼。 – 2012-02-06 17:22:14
流是由XML-RPC.NET庫以某種方式/某處訪問網站時(http:// localhost/DoSomething)創建的。 – Coder6841 2012-02-06 17:31:15
我沒有時間仔細查看代碼,但假設'HttpListener'是一個XML RPC類型,那麼您可以對其進行子類化並更改'GetContext()'的實現方式以注入所需的行爲。 – 2012-02-06 17:34:53