/// <summary> /// Create a new <see cref="HttpWorkerRequest"/> from data contained in this /// <see cref="BaseRequest"/>. The returned object must also implement /// <see cref="IForeignData"/> interface. <see cref="BaseRequest"/> stores /// the TextWriter in foreign data of the worker request, to use it later in /// <see cref="ExtractResponse"/>. /// </summary> /// <returns>A new <see cref="HttpWorkerRequest"/>.</returns> /// <seealso cref="HttpWorkerRequest"/> /// <seealso cref="IForeignData"/> /// <seealso cref="HttpWorkerRequest"/> /// <seealso cref="ExtractResponse"/> public virtual HttpWorkerRequest CreateWorkerRequest() { StringWriter wr = new StringWriter(); BaseWorkerRequest br = CreateBaseWorkerRequest(wr); ((IForeignData)br) [GetType()] = wr; return(br); }
/// <summary> /// Extracts the response from the completed <see cref="System.Web.HttpWorkerRequest"/> /// and returns a new <see cref="Response"/> instance. This method works with HttpWorkerRequest /// created with <see cref="CreateWorkerRequest"/>. /// </summary> /// <param name="request">this must be the same request that was returned by /// CreateWorkerRequest</param> /// <returns>New <see cref="Response"/> instance, containing the results of the /// request.</returns> /// <seealso cref="System.Web.HttpWorkerRequest"/> /// <seealso cref="Response"/> public virtual Response ExtractResponse(HttpWorkerRequest request) { BaseWorkerRequest br = (BaseWorkerRequest)request; IForeignData d = (IForeignData)br; TextWriter wr = (TextWriter)d[GetType()]; d[GetType()] = null; wr.Close(); Response r = new Response(); r.Body = wr.ToString(); r.StatusCode = br.StatusCode; r.StatusDescription = br.StatusDescription; return(r); }