私はXML-RPC.NET(http://www.xml-rpc.net/)と、特定のネットワークポートでXML-RPC通信をリッスンしてそれに応答するHttpListenerメソッドを使用しています。Streamオブジェクトを消費せずに読む
で来るリクエストのボディがHttpListenerContextInstance.Request.InputStream
Streamオブジェクトを介してアクセスできます:
HttpListener hlListener = new HttpListener();
HttpListenerContext hlcContext = hlListener.GetContext();
// hlcContext.Request.InputStream contains what I want
ストリームがhlcContext.Request.InputStream
からアクセスすることができますが、このストリームは、私はそれを表示する/それを読むことができませんシークではありませんそれからXML-RPC.NETライブラリが必要に応じてそれを使用できるように、その先頭に戻ります。一度読んだら、それは消費され、再読めません。
このような状況を処理する方法の1つは、ストリームをMemoryStreamに変換してシークをサポートしていることを理解していますが、XML-RPC.NETが続行するようにこれを行う方法はわかりませんストリームの代わりに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 :(
私は文字列でそれを格納し、ストリームが仕事を続けることができますように、私はストリームから読み取ることができますどのように:ただのMemoryStreamにストリームをコピーすると、その時点の過去、それは使用できなくなり、ストリームを消費しているようですそれ以降のXML-RPC.NET?
方法を使用することができますあなたはXML-RPC.NETにストリームを提供していますか?私はあなたのサンプルコードではそれを見ません。 –
ストリームは、ウェブサイトにアクセスするたびに(http:// localhost/DoSomething)XML-RPC.NETライブラリによって何らかの形で/どこかで作成されます。 – Coder6841
私はコードを調べる時間がありませんでしたが、 'HttpListener'がXML RPC型であると仮定すると、それをサブクラス化して' GetContext() 'がどのように実装されて必要な振る舞いを注入するかを変更できるかもしれません。 –