System.Net.Sockets.SocketException:无法解析Mono上的自托管Nancy应用程序

本文关键字:应用程序 Nancy Mono SocketException Sockets Net System | 更新日期: 2023-09-27 18:02:59

我在我的Program.cs中有以下代码来启动Mono 4.2.2上的自托管nancy应用。

    public static void Main (string[] args)
    {           
        var uri = "";
        if(ReflectConfiguration.CurrentEnviroment == ReflectConfiguration.Environments.Production || ReflectConfiguration.CurrentEnviroment == ReflectConfiguration.Environments.Staging)
        {
            uri = string.Format("http://localhost:{0}", Environment.GetEnvironmentVariable("PORT").ToString());
        }
        else if(ReflectConfiguration.CurrentEnviroment == ReflectConfiguration.Environments.Development)
        {
            uri = string.Format("http://localhost:8888");
        }
        Console.WriteLine("Starting Reflect.Web application on " + uri);
        // initialize an instance of NancyHost
        var host = new NancyHost(new Uri(uri));
        host.Start();  // start hosting
        // check if we're running on mono
        if (Type.GetType("Mono.Runtime") != null)
        {
            // on mono, processes will usually run as daemons - this allows you to listen
            // for termination signals (ctrl+c, shutdown, etc) and finalize correctly
            UnixSignal.WaitAny(new[] {
                new UnixSignal(Signum.SIGINT),
                new UnixSignal(Signum.SIGTERM),
                new UnixSignal(Signum.SIGQUIT),
                new UnixSignal(Signum.SIGHUP)
            });
        }
        else
        {
            Console.ReadLine();
        }
        host.Stop();  // stop hosting
    }

这段代码运行了好几个月。刚才开始出现这个错误:

System.Net.Sockets.SocketException: Could not resolve host '+'

:

host.Start();  // start hosting

我不知道我最近对任何依赖项做了任何更新。

以前有人遇到过这个吗?为什么是"+"号呢?

System.Net.Sockets.SocketException:无法解析Mono上的自托管Nancy应用程序

+可以是。net的HttpListener(不确定mono)用来确定应该托管应用程序的位置的"URI前缀字符串"的一部分,查看HttpListener的class注释了解更多信息:

类似地,要指定HttpListener接受发送到端口的所有请求,请将host元素替换为"+"字符"https://+:8080"。"*"answers"+"字符可以出现在包含路径的前缀中。

我猜你的代码正在检查ReflectConfiguration.CurrentEnviroment,而错过了你选择的情况。

没有配置/存在的环境吗?或者您不是在生产、登台或开发部门工作?当你创建一个新的URI对象时,uri的值是多少?