自托管的OWIN项目; http:// localhost:8080不起作用,http:// +:8080起作用吗?

时间:2018-12-07 10:46:35

标签: c# .net owin

我有一个正在尝试运行的自托管OWIN项目。配置为监听:

http://localhost:8080

每当我尝试访问该URL时,都会显示 HTTP错误503。服务不可用错误。

我已经运行netstat -a -b,并确保8080端口上没有其他应用程序在运行。

当我将配置更改为http://+:8080时,项目运行正常。因此,唯一的变化是将localhost更改为+

现在这是奇怪的事情:

  • 我确保HTTP名称空间中的所有条目(localhost:8080+:8080)都相同(请参见thisthis,其中“ iedereen”是荷兰语代表“所有人”(是的,这仅在我的测试台上)。 netsh http show urlacl的相关输出:

    URL Reservations: 
    
    Reserved URL            : http://+:8080/ 
        User: \Everyone
            Listen: Yes
            Delegate: Yes
            SDDL: D:(A;;GAGXGWGR;;;WD) 
    
    Reserved URL            : http://localhost:8080/ 
        User: \Everyone
            Listen: Yes
            Delegate: Yes
            SDDL: D:(A;;GAGXGWGR;;;WD) 
    
  • 我在端口8081或其他端口上有相同的问题; “ +”有效,“ localhost”无效。因此,为确保与8080没有冲突,我尝试了8081(以及其他端口,当然还有正确的urlacl)

  • 当我使用+:8080时,应用程序可以正常运行;我得到了想要的回应。因此,这不是防火墙问题。我尝试过的端口8081或其他端口也不是。另外,503来自应用程序(毕竟这是一个应用程序错误,但是,当我停止该应用程序时,我只是没有得到响应,而不是503),因此,也没有防火墙问题。
  • 我尝试以管理员身份运行无济于事,与以管理员身份运行VS相同。
  • localhost:8080可在同事的计算机上工作(这首先就是这种方式)
  • localhost可以很好地解析为127.0.0.1::1。没有更改的主机文件。

我似乎无法调试此问题,我可以在控制器方法中设置一个断点,但从未实现。该应用程序启动正常。

好吧,复制测试代码:

using Microsoft.Owin.Hosting;
using Owin;
using System;

namespace TestApp
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            using (WebApp.Start<WebAppStartup>("http://localhost:8080"))
            {
                Console.WriteLine("Press [enter] to quit...");
                Console.ReadLine();
            }
        }
    }

    internal class WebAppStartup
    {
        public void Configuration(IAppBuilder app)
        {
            app.Run(context =>
            {
                context.Response.ContentType = "text/plain";
                return context.Response.WriteAsync("Hello, world.");
            });
        }
    }
}

同样,以上操作不起作用除非,我将localhost更改为+

我的主要问题是:我可以调试吗?我在启动应用程序时没有异常,但从未达到控制器方法(或:在以上代码中,从未返回“ Hello,world”)。我已经检查了Windows事件日志,但那里什么也没有。

注意:我的问题实际上不是问题(因为我有一个“解决方法”);当我仅更改配置以使用http://+:8080 时,这是一个原则问题,我想知道为什么 +有效而localhost没有。

我最感兴趣的是如何调试它以及localhost+之间的区别是什么;如何配置OWIN或在何处设置断点以查看请求进入或发送503响应,或者如何获取此日志或...


编辑:我将代码更改为:

using Microsoft.Owin;
using Microsoft.Owin.Hosting;
using Owin;
using System;
using System.Threading.Tasks;

namespace TestApp
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            using (WebApp.Start<WebAppStartup>("http://localhost:8080/"))   // or: http://+:8080/
            {
                Console.WriteLine("Press [enter] to quit...");
                Console.ReadLine();
            }
        }
    }

    internal class WebAppStartup
    {
        public void Configuration(IAppBuilder app)
        {
            app.Use<TestMiddleware>();

            app.Run(context =>
            {
                context.Response.ContentType = "text/plain";
                Console.WriteLine("Sending response");
                return context.Response.WriteAsync("Hello, world.");
            });
        }
    }

    public class TestMiddleware : OwinMiddleware
    {
        public TestMiddleware(OwinMiddleware next) : base(next) { }

        public override async Task Invoke(IOwinContext context)
        {
            Console.WriteLine("Begin Request");
            await Next.Invoke(context);
            Console.WriteLine("End Request");
        }
    }
}

当我使用http://+:8080运行应用程序时,我的控制台中显示以下内容:

Begin Request
Sending response
End Request

“ Hello,world”也出现在我的浏览器中。我可以在“ begin request”行上设置一个断点,它会被命中。然后,我再次更改为http://localhost:8080和... HTTP Error 503. The service is unavailable.。再次。控制台什么也没有显示(除了明显的“按[enter]退出...”),没有找到断点。

0 个答案:

没有答案