Пример #1
0
        private static async Task SerializerExampleAsync()
        {
            var storeDirectory = Path.Combine(Directory.GetCurrentDirectory(), "ProtocolBuffer");

            Directory.CreateDirectory(storeDirectory);

            var networkHandler = new NetworkHandler();
            var messageStore   = new HttpMessageStore(new FileSystemStore(storeDirectory), new HttpMessageMapper(), new ProtocolBufferSerializer());
            var logger         = new HttpMessageLogger(messageStore);
            var loggingHandler = new LoggingHandler(logger)
            {
                InnerHandler = networkHandler
            };

            using (var httpClient = new HttpClient(loggingHandler))
            {
                var responseFromClient = await httpClient.GetAsync("http://httpbin.org/ip");

                using (responseFromClient)
                {
                    Console.WriteLine("Response from client:");
                    Console.WriteLine(await responseFromClient.Content.ReadAsStringAsync());
                }

                ExchangeId exchangeId = responseFromClient.RequestMessage.GetExchangeId();
                var        responseOrExceptionFromStore = await messageStore.GetResponseOrExceptionAsync(exchangeId, CancellationToken.None);

                using (responseOrExceptionFromStore.Response)
                {
                    Console.WriteLine("Response from store:");
                    Console.WriteLine(await responseOrExceptionFromStore.Response.Content.ReadAsStringAsync());
                }
            }
        }
Пример #2
0
            public TestState()
            {
                // dependencies
                Store      = new Mock <IStore>();
                Mapper     = new Mock <IHttpMessageMapper>();
                Serializer = new Mock <IProtocolBufferSerializer>();

                // data
                CancellationToken = new CancellationToken();
                ExchangeId        = new ExchangeId(new DateTimeOffset(2000, 1, 1, 0, 0, 0, TimeSpan.Zero), new Guid("4ae0fbbaaeba4db1bd98d106ece1a6e0"));
                RequestMessage    = new HttpRequestMessage
                {
                    Content = new StreamContent(Stream.Null)
                    {
                        Headers =
                        {
                            { "Content-Type",   "text/plain" },
                            { "Content-Length", "7"          }
                        }
                    }
                };
                Request = new HttpRequest
                {
                    Method  = "POST",
                    Url     = "http://example/path",
                    Version = "1.1",
                    Headers = new[]
                    {
                        new HttpHeader {
                            Name = "User-Agent", Value = "HttpMessageStore"
                        },
                        new HttpHeader {
                            Name = "Content-Type", Value = "text/plain"
                        },
                        new HttpHeader {
                            Name = "Content-Length", Value = "1"
                        }
                    },
                    HasContent = true,
                    Content    = GetStream("original-request")
                };
                ResponseMessage = new HttpResponseMessage
                {
                    Content = new StreamContent(Stream.Null)
                    {
                        Headers =
                        {
                            { "Content-Type",   "text/plain" },
                            { "Content-Length", "8"          }
                        }
                    }
                };
                Response = new HttpResponse
                {
                    Version       = "1.1",
                    StatusCode    = 200,
                    ReasonPhrease = "OK",
                    Headers       = new[]
                    {
                        new HttpHeader {
                            Name = "Server", Value = "HttpMessageStore"
                        },
                        new HttpHeader {
                            Name = "Content-Type", Value = "text/plain"
                        },
                        new HttpHeader {
                            Name = "Content-Length", Value = "2"
                        }
                    },
                    HasContent = true,
                    Content    = GetStream("original-response")
                };
                Exception           = new Exception("some exception");
                ResponseOrException = new HttpResponseOrException {
                    Response = Response, ExceptionString = null
                };

                // setup
                Store
                .Setup(x => x.GetAsync(It.Is <string>(k => k.EndsWith("request")), It.IsAny <CancellationToken>()))
                .Returns(() => Task.FromResult(GetStream("store-request")));
                Store
                .Setup(x => x.GetAsync(It.Is <string>(k => k.EndsWith("request-content")), It.IsAny <CancellationToken>()))
                .Returns(() => Task.FromResult(GetStream("store-request-content")));
                Store
                .Setup(x => x.GetAsync(It.Is <string>(k => k.EndsWith("response")), It.IsAny <CancellationToken>()))
                .Returns(() => Task.FromResult(GetStream("store-response")));
                Store
                .Setup(x => x.GetAsync(It.Is <string>(k => k.EndsWith("response-content")), It.IsAny <CancellationToken>()))
                .Returns(() => Task.FromResult(GetStream("store-response-content")));
                Mapper
                .Setup(x => x.ToHttpAsync(It.IsAny <HttpRequestMessage>(), It.IsAny <CancellationToken>()))
                .Returns(() => Task.FromResult(Request));
                Mapper
                .Setup(x => x.ToHttpMessage(It.IsAny <HttpRequest>()))
                .Returns(() => RequestMessage);
                Mapper
                .Setup(x => x.ToHttpAsync(It.IsAny <HttpResponseMessage>(), It.IsAny <CancellationToken>()))
                .Returns(() => Task.FromResult(Response));
                Mapper
                .Setup(x => x.ToHttpMessage(It.IsAny <HttpResponse>()))
                .Returns(() => ResponseMessage);
                Serializer
                .Setup(x => x.Serialize(It.IsAny <Stream>(), It.IsAny <HttpRequest>()))
                .Callback <Stream, HttpRequest>((s, r) => WriteToStream(s, "serialized"));
                Serializer
                .Setup(x => x.Deserialize <HttpRequest>(It.IsAny <Stream>()))
                .Returns(() => Request);
                Serializer
                .Setup(x => x.Serialize(It.IsAny <Stream>(), It.IsAny <HttpResponseOrException>()))
                .Callback <Stream, HttpResponseOrException>((s, r) => WriteToStream(s, "serialized"));
                Serializer
                .Setup(x => x.Deserialize <HttpResponseOrException>(It.IsAny <Stream>()))
                .Returns(() => ResponseOrException);

                Target = new HttpMessageStore(Store.Object, Mapper.Object, Serializer.Object);
            }