【问题标题】:How to start Nancy web server in c# (wpf)如何在 c# (wpf) 中启动 Nancy Web 服务器
【发布时间】:2022-01-26 00:05:36
【问题描述】:

我正在尝试使用以下代码启动一个简单的 Nancy Web 服务器(在 WPF 项目中,因为我还需要一些窗口...):

public class ProfilePage : NancyModule
{
    public ProfilePage()
    {
        var host = new NancyHost(new Uri("http://localhost:8080"), new Bootstrapper());
        host.Start();

        Get("/", _ => { return $"Hello world"; });
    }

    public class SelfHostRootPathProvider : IRootPathProvider
    {

         public string GetRootPath()
         {
             return Environment.CurrentDirectory;
         }
    }
}

public class Bootstrapper : DefaultNancyBootstrapper
{
    protected override IRootPathProvider RootPathProvider
    {
        get { return new SelfHostRootPathProvider(); }
    }
}

当我运行它时,它只会永远加载并最终崩溃并出现以下异常:System.StackOverflowException: 'Exception of type 'System.StackOverflowException' was throwed.'

有人知道我做错了什么吗?

【问题讨论】:

  • 你是从 VS 运行的吗? VS 不会自动以 ADMIN 权限运行。通过右键单击快捷方式启动 VS 并选择 RunAsAdmin。
  • 我以管理员身份启动了 Visual Studio。但是还是不行
  • 有人知道它为什么不起作用吗?
  • 如果你在 VS 中调试它,调用堆栈应该会告诉你出了什么问题。顺便说一句,南希不再维护,所以你应该尽量避免它。迁移到 .NET Core 以便您可以一起使用 ASP.NET Core + WPF。
  • Web 服务器不应该访问本地机器上的资源。来自客户端的连接默认为 GUEST 权限。也不建议以管理员身份运行服务,因为您可以打开后门以允许黑客访问计算机。您应该限制使用 Admin 运行的代码量。如果您需要访问文件,请将它们放在允许访客访问数据的网络驱动器上。我会检查 Windows 上的事件查看器,看看是否有任何与您的应用程序相关的错误。

标签: c# webserver nancy


【解决方案1】:

NancyModule 应该只设置路由而不是其他任何东西。无论如何也不需要引用 NancyModule,因为它是由引导程序自动获取的。这样的事情就足够了:

public class ProfilePage : NancyModule
{
    public ProfilePage()
    {
        Get("/", _ => { return $"Hello world"; });
    }
}

然后在其他地方,您需要开始托管:

using (var host = new NancyHost(new Uri("http://localhost:8080")))
{
   host.Start();
   Console.WriteLine("Running on http://localhost:1234");
   Console.ReadLine();
}

我认为您看到的问题是主机正在启动,然后尝试设置路由,首先启动主机,这需要设置路由,这...... 很容易看出它是如何导致 StackOverflowException 的。

【讨论】:

  • 感谢您的解决方案。但是,现在我有另一个例外: Nancy.Bootstrapper.MultipleRootPathProvidersLocatedException: '找到多个 IRootPathProvider,并且由于我们不知道您要使用哪个,您需要覆盖引导程序上的 RootPathProvider 属性并指定要使用哪个利用。很抱歉给您带来不便。'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多