コード例 #1
0
        public async Task ConnectionCanReadAndWrite()
        {
            var engine = new KestrelEngine(LibraryManager, new ShutdownNotImplemented());

            engine.Start(1);
            var started = engine.CreateServer("http", "localhost", 54321, App);

            Console.WriteLine("Started");
            var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            socket.Connect(new IPEndPoint(IPAddress.Loopback, 54321));
            socket.Send(Encoding.ASCII.GetBytes("POST / HTTP/1.0\r\n\r\nHello World"));
            socket.Shutdown(SocketShutdown.Send);
            var buffer = new byte[8192];

            for (; ;)
            {
                var length = socket.Receive(buffer);
                if (length == 0)
                {
                    break;
                }
                var text = Encoding.ASCII.GetString(buffer, 0, length);
            }
            started.Dispose();
            engine.Dispose();
        }
コード例 #2
0
        public void ConnectionCanReadAndWrite(TestServiceContext testContext)
        {
            testContext.App = App;
            var engine = new KestrelEngine(testContext);

            engine.Start(1);
            var address = ServerAddress.FromUrl("http://localhost:54321/");
            var started = engine.CreateServer(address);

            Console.WriteLine("Started");
            var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            socket.Connect(new IPEndPoint(IPAddress.Loopback, 54321));
            socket.Send(Encoding.ASCII.GetBytes("POST / HTTP/1.0\r\n\r\nHello World"));
            socket.Shutdown(SocketShutdown.Send);
            var buffer = new byte[8192];

            while (true)
            {
                var length = socket.Receive(buffer);
                if (length == 0)
                {
                    break;
                }
                var text = Encoding.ASCII.GetString(buffer, 0, length);
            }
            started.Dispose();
            engine.Dispose();
        }
コード例 #3
0
        public IDisposable Start(IServerInformation serverInformation, Func <IFeatureCollection, Task> application)
        {
            var disposables = new List <IDisposable>();
            var information = (ServerInformation)serverInformation;
            var engine      = new KestrelEngine(_libraryManager, _appShutdownService);

            engine.Start(1);
            foreach (var address in information.Addresses)
            {
                disposables.Add(engine.CreateServer(
                                    address.Scheme,
                                    address.Host,
                                    address.Port,
                                    async frame =>
                {
                    var request = new ServerRequest(frame);
                    await application.Invoke(request.Features);
                }));
            }
            disposables.Add(engine);
            return(new Disposable(() =>
            {
                foreach (var disposable in disposables)
                {
                    disposable.Dispose();
                }
            }));
        }
コード例 #4
0
        public void ConnectionCanReadAndWrite(TestServiceContext testContext)
        {
            var port = TestServer.GetNextPort();

            testContext.App = App;
            var engine = new KestrelEngine(testContext);

            engine.Start(1);
            var address = ServerAddress.FromUrl($"http://localhost:{port}/");
            var started = engine.CreateServer(address);

            var socket = TestConnection.CreateConnectedLoopbackSocket(port);

            socket.Send(Encoding.ASCII.GetBytes("POST / HTTP/1.0\r\n\r\nHello World"));
            socket.Shutdown(SocketShutdown.Send);
            var buffer = new byte[8192];

            while (true)
            {
                var length = socket.Receive(buffer);
                if (length == 0)
                {
                    break;
                }
                var text = Encoding.ASCII.GetString(buffer, 0, length);
            }
            started.Dispose();
            engine.Dispose();
        }
コード例 #5
0
 public void Create(Func <IFeatureCollection, Task> app, ServiceContext context, string serverAddress)
 {
     _engine = new KestrelEngine(context);
     _engine.Start(1);
     _server = _engine.CreateServer(
         ServerAddress.FromUrl(serverAddress),
         app);
 }
コード例 #6
0
 public void Create(Func <Frame, Task> app)
 {
     _engine = new KestrelEngine(LibraryManager);
     _engine.Start(1);
     _server = _engine.CreateServer(
         "http",
         "localhost",
         54321,
         app);
 }
コード例 #7
0
        public async Task ListenerCanCreateAndDispose()
        {
            var engine = new KestrelEngine(LibraryManager, new ShutdownNotImplemented());

            engine.Start(1);
            var started = engine.CreateServer("http", "localhost", 54321, App);

            started.Dispose();
            engine.Dispose();
        }
コード例 #8
0
        public void ListenerCanCreateAndDispose()
        {
            var engine = new KestrelEngine(LibraryManager, new TestServiceContext());

            engine.Start(1);
            var started = engine.CreateServer("http", "localhost", 54321, App);

            started.Dispose();
            engine.Dispose();
        }
コード例 #9
0
 public void Create(RequestDelegate app, ServiceContext context, string serverAddress)
 {
     context.FrameFactory = (connectionContext, remoteEP, localEP, prepareRequest) =>
     {
         return(new Frame <HttpContext>(new DummyApplication(app), connectionContext, remoteEP, localEP, prepareRequest));
     };
     _engine = new KestrelEngine(context);
     _engine.Start(1);
     _server = _engine.CreateServer(
         ServerAddress.FromUrl(serverAddress));
 }
コード例 #10
0
        public void ListenerCanCreateAndDispose(ServiceContext testContext)
        {
            var engine = new KestrelEngine(testContext);

            engine.Start(1);
            var address = ServerAddress.FromUrl("http://localhost:54321/");
            var started = engine.CreateServer(address, App);

            started.Dispose();
            engine.Dispose();
        }
コード例 #11
0
        public void ListenerCanCreateAndDispose(TestServiceContext testContext)
        {
            testContext.App = App;
            var engine = new KestrelEngine(testContext);

            engine.Start(1);
            var address = ServerAddress.FromUrl($"http://localhost:{TestServer.GetNextPort()}/");
            var started = engine.CreateServer(address);

            started.Dispose();
            engine.Dispose();
        }
コード例 #12
0
        public void ListenerCanCreateAndDispose(TestServiceContext testContext)
        {
            testContext.App = App;
            var engine = new KestrelEngine(testContext);

            engine.Start(1);
            var address = ServerAddress.FromUrl("http://127.0.0.1:0/");
            var started = engine.CreateServer(address);

            started.Dispose();
            engine.Dispose();
        }
コード例 #13
0
        public TestServer(RequestDelegate app, ServiceContext context, string serverAddress)
        {
            context.FrameFactory = connectionContext =>
            {
                return(new Frame <HttpContext>(new DummyApplication(app), connectionContext));
            };

            try
            {
                _engine = new KestrelEngine(context);
                _engine.Start(1);
                _address = ServerAddress.FromUrl(serverAddress);
                _server  = _engine.CreateServer(_address);
            }
            catch
            {
                _server?.Dispose();
                _engine?.Dispose();
                throw;
            }
        }