/// <summary> /// Create an <see cref="HttpMessage.Response"/> object out of the response from a /// service. /// </summary> /// <param name="serviceBaseUri">The real service's base Uri.</param> /// <param name="response">The response from the service.</param> /// <returns>An <see cref="HttpMessage.Response"/> object containing the response.</returns> private static HttpMessage.Response ConstructResponseInfo( Uri serviceBaseUri, HttpWebResponse response) { HttpMessage.Response responseInfo = new HttpMessage.Response(); // Copy the response status code responseInfo.StatusCode = response.StatusCode; // Copy all relevant headers to the response responseInfo.Headers = new HttpMessage.HeaderCollection(); foreach (string headerKey in response.Headers.AllKeys) { if (!headerKey.Equals("Transfer-Encoding", StringComparison.OrdinalIgnoreCase) && !headerKey.Equals("Content-Length", StringComparison.OrdinalIgnoreCase)) { responseInfo.Headers.Add(new HttpMessage.Header() { Name = headerKey, Value = response.Headers[headerKey] }); } } // Copy response cookies responseInfo.Cookies = new HttpMessage.CookieCollection(); foreach (Cookie cookie in response.Cookies) { Uri cookieHostUri = new Uri(serviceBaseUri.Scheme + Uri.SchemeDelimiter + serviceBaseUri.Host); Uri cookieUri = new Uri(cookieHostUri, cookie.Path); Uri cookieRelativeUri = serviceBaseUri.MakeRelativeUri(cookieUri); responseInfo.Cookies.Add(new HttpMessage.Cookie { Name = cookie.Name, Value = cookie.Value, RelativeUri = cookieRelativeUri }); } // Copy response stream using (StreamReader reader = new StreamReader(response.GetResponseStream())) { responseInfo.ResponseText = reader.ReadToEnd(); } return(responseInfo); }
/// <summary> /// Constructs the response from the specified <see cref="HttpMessage.Response"/>. /// </summary> /// <param name="responseInfo">The object that contains all info about the response.</param> /// <param name="baseUri">The base Uri for the response.</param> /// <param name="response">The response object to construct.</param> private static void ConstructListenerResponse( HttpMessage.Response responseInfo, Uri baseUri, HttpListenerResponse response) { // Set the status code response.StatusCode = (int)responseInfo.StatusCode; // Copy relevant response headers foreach (HttpMessage.Header header in responseInfo.Headers) { response.Headers[header.Name] = header.Value; } // Copy response cookies foreach (HttpMessage.Cookie responseCookie in responseInfo.Cookies) { Cookie cookie = new Cookie(responseCookie.Name, responseCookie.Value); Uri cookieUri = responseCookie.RelativeUri; if (!cookieUri.IsAbsoluteUri) { cookieUri = new Uri(baseUri, cookieUri); } cookie.Domain = cookieUri.Host; cookie.Path = cookieUri.LocalPath; response.Cookies.Add(cookie); } // Copy response stream byte[] responseBytes = Encoding.UTF8.GetBytes(responseInfo.ResponseText); response.ContentLength64 = responseBytes.Length; using (BinaryWriter writer = new BinaryWriter(response.OutputStream)) { writer.Write(responseBytes); } }