HessianOutput is unbuffered, so any client needs to provide its own buffering.
protected override void ProcessRequest(System.Net.HttpListenerContext ctx) { try { context = ctx; Stream inStream = ctx.Request.InputStream; MemoryStream outStream = new MemoryStream(); //ctx.Response.BufferOutput = true; ctx.Response.ContentType = "text/xml"; AbstractHessianInput inHessian = new CHessianInput(inStream); AbstractHessianOutput outHessian = new CHessianOutput(outStream); if (m_objectSkeleton == null) { //Vieleicht das Interface als API übergeben??? m_objectSkeleton = new CHessianSkeleton(this.GetType(), this); } m_objectSkeleton.invoke(inHessian, outHessian); byte[] arrData = outStream.ToArray(); int intLength = arrData.Length; //Set length ctx.Response.ContentLength64 = intLength; //Write stream ctx.Response.OutputStream.Write(arrData, 0, intLength); return; } catch (Exception ex) { ctx.Response.StatusCode = 500; // "Internal server error" ctx.Response.StatusDescription = ex.Message; } }
/// <summary> /// The Request will be processed here. /// The main function in this class /// </summary> public void ProcessRequest() { //Get references to sockets input & output streams m_stream = new NetworkStream(m_socket, FileAccess.ReadWrite, true); MemoryStream memoryStream = new MemoryStream(); //Reads the Header of HTTP Message try { ReadHeaders(); } catch (NotSupportedException e) { SendError(500, "Close"); m_socket.Close(); m_stream.Close(); return; } AbstractHessianInput inHessian = new CHessianInput(m_stream); AbstractHessianOutput tempOutHessian = new CHessianOutput(memoryStream); /// Proxy object CHessianSkeleton objectSkeleton = null; try { objectSkeleton = new CHessianSkeleton(m_apiType, m_Service); objectSkeleton.invoke(inHessian, tempOutHessian); WriteResponse(memoryStream.ToArray()); } catch (Exception e) { SendError(500, "Close"); } finally { m_socket.Close(); m_stream.Close(); } }
/// <summary> /// Instantiation of the hessian output (not cached) /// </summary> /// <param name="stream">Strean for HessianOutput - Instantiation</param> /// <returns>New HessianOutput - Instance</returns> protected CHessianOutput GetHessianOutput(Stream stream) { CHessianOutput cHessianOut = new CHessianOutput(stream); return cHessianOut; }