2
respostas

Codigo Trava e não sobe

Meu servidor não sobe, fiz um debug para ler o que estava acontecendo e descobri que nessa linha nunca retornavar contexto = httpListener.GetContext();

private void ManipularRequisicao()
        {
            var httpListener = new HttpListener();

            foreach (var prefixo in _prefixos)
                httpListener.Prefixes.Add(prefixo);

            httpListener.Start();

            var contexto = httpListener.GetContext();

            var requisicao = contexto.Request;
            var resposta = contexto.Response;

            var path = requisicao.Url.AbsolutePath;

            if (path.Equals("/Assets/css/styles.css"))
            {
                var assembly = Assembly.GetExecutingAssembly();
                var nomeResource = "ByteBank.Portal.Assets.css.styles.css";
                var resourceStream = assembly.GetManifestResourceStream(nomeResource);

                var bytesResource = new byte[resourceStream.Length];

                resourceStream.Read(bytesResource, 0,(int) resourceStream.Length);

                resposta.ContentType = "text/css; charset=utf8";
                resposta.StatusCode = 200;
                resposta.ContentLength64 = bytesResource.Length;

                resposta.OutputStream.Write(bytesResource, 0, bytesResource.Length);
                resposta.OutputStream.Close();
            }
            else if (path.Equals("/Assets/js/main.js"))
            {
                var assembly = Assembly.GetExecutingAssembly();
                var nomeResource = "ByteBank.Portal.Assets.js.mains.js";
                var resourceStream = assembly.GetManifestResourceStream(nomeResource);

                var bytesResource = new byte[resourceStream.Length];

                resourceStream.Read(bytesResource, 0,(int) resourceStream.Length);

                resposta.ContentType = "application/js; charset=utf8";
                resposta.StatusCode = 200;
                resposta.ContentLength64 = bytesResource.Length;

                resposta.OutputStream.Write(bytesResource, 0, bytesResource.Length);
                resposta.OutputStream.Close();
            }

            httpListener.Stop();
        }
2 respostas

Olá Pablo, como vai?

Fiz o teste com o código disponibilizado na aula e por aqui funcionou normalmente.

Vamos fazer algumas modificações no seu código:

if (path.Equals("/Assets/css/styles.css")) //De

if (path == "/Assets/css/styles.css") // Para
else if (path.Equals("/Assets/js/main.js")) // De

else if (path == "/Assets/js/main.js") // Para
charset=utf8 // De

charset=utf-8" // Para

Irei deixar a classe inteira aqui, caso precise:

public class WebApplication
    {
        private readonly string[] _prefixos;

        public WebApplication(string[] prefixos)
        {
            if (prefixos == null)
                throw new ArgumentNullException(nameof(prefixos));
            _prefixos = prefixos;
        }

        public void Iniciar()
        {
            while (true)
                ManipularRequisicao();
        }

        private void ManipularRequisicao()
        {
            var httpListener = new HttpListener();

            foreach (var prefixo in _prefixos)
                httpListener.Prefixes.Add(prefixo);

            httpListener.Start();

            var contexto = httpListener.GetContext();
            var requisicao = contexto.Request;
            var resposta = contexto.Response;

            var path = requisicao.Url.AbsolutePath;

            if (path == "/Assets/css/styles.css")
            {
                // Retornar o nosso documento styles.css
                var assembly = Assembly.GetExecutingAssembly();

                var nomeResource = "ByteBank.Portal.Assets.css.styles.css";
                var resourceStream = assembly.GetManifestResourceStream(nomeResource);
                var bytesResource = new byte[resourceStream.Length];

                resourceStream.Read(bytesResource, 0, (int)resourceStream.Length);

                resposta.ContentType = "text/css; charset=utf-8";
                resposta.StatusCode = 200;
                resposta.ContentLength64 = resourceStream.Length;

                resposta.OutputStream.Write(bytesResource, 0, bytesResource.Length);

                resposta.OutputStream.Close();
            }
            else if (path == "/Assets/js/main.js")
            {
                // Retornar o nosso documento main.js
                var assembly = Assembly.GetExecutingAssembly();

                var nomeResource = "ByteBank.Portal.Assets.js.main.js";
                var resourceStream = assembly.GetManifestResourceStream(nomeResource);
                var bytesResource = new byte[resourceStream.Length];

                resourceStream.Read(bytesResource, 0, (int)resourceStream.Length);

                resposta.ContentType = "application/js; charset=utf-8";
                resposta.StatusCode = 200;
                resposta.ContentLength64 = resourceStream.Length;

                resposta.OutputStream.Write(bytesResource, 0, bytesResource.Length);

                resposta.OutputStream.Close();
            }

            httpListener.Stop();
        }

Quando você tenta acessar o navegador aparece a mensagem "Não é possível acessar esse site" ?

Aguardo retorno.

Abraços

Descobri o problema,

eu estava usando HTTS não http

var prefixos = new string[] {"https://localhost:5341/"};
var webApp = new WebApplication(prefixos);
webApp.Iniciar();

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software