gpt4 book ai didi

c# - 使用 Nancy self host + TopShelf 的空白回复

转载 作者:太空狗 更新时间:2023-10-29 22:54:44 27 4
gpt4 key购买 nike

我正在尝试在 Topshelf 服务中使用 Nancy(将自托管与 Razor View nuget 包结合使用)。我在 http://localhost:8585/ 上托管它,当我处于 Debug模式或直接调用我的可执行文件时,它工作得很好。 Nancy 模块提供了完美的 Razor View 。

然后我安装应用程序:

myapp.exe install

当我启动该服务时,它似乎工作正常,没有任何错误。然后,当我去 http://localhost:8585/在浏览器中,我得到一个空白的响应。关于原因有什么想法吗?

在我开始使用 Topshelf 托管服务之前,我启动了 Nancy:

_nancyHost = new NancyHost(_baseUri);
_nancyHost.Start();

之后,topshelf服务就这样配置和启动了:

using (Container)
{
var host = HostFactory.New(config =>
{
config.EnableDashboard();
config.AfterStartingServices(() => Console.WriteLine("Done starting..."));
config.Service<EventHandlerService>(s =>
{
s.SetServiceName("EventHandlerService");
s.ConstructUsing(c => Container.Get<EventHandlerService>());
s.WhenStarted(n => StartService(n, stopwatch));
s.WhenStopped(n => StopService(n, stopwatch));
});
config.RunAsLocalSystem();
config.SetDescription("A service for processing events.");
config.SetDisplayName("EventHandlerService");
config.SetInstanceName("EventHandlerService");
config.SetServiceName("EventHandlerService");
});
host.Run();
}

我正在使用 ninject,StartService 和 StopService 方法只是打印 stopwatch.ElapsedMilliseconds 当前值的函数。

这是我的 Nancy 模块的配置:

Get["/"] = parameters =>
{
var indexViewModel = new IndexViewModel { CurrentDateTime = DateTime.Now, WorkLog = _service.WorkLog };

return View["index", indexViewModel];
};

Get["/js/{file}"] = p =>
{
return Response.AsJs("scripts/" + p.file as String);
};

Get["/style/{file}"] = p =>
{
return Response.AsCss("content/themes/base/" + p.file as String);
};

Get["/img/{file}"] = p =>
{
return Response.AsImage("content/themes/base/images/" + p.file as String);
};

除了自托管和 Razor 部分,我使用 Nancy 中的所有默认设置。知道会发生什么吗?

我还尝试了 netsh http add urlacl url=http://+:8585/user=\Everyone,它似乎对行为没有任何影响。

最佳答案

我猜这是一个根路径问题,所以它找不到您的 View (假设正在复制 View )。我不知道 TopShelf 是如何工作的——它是否将工作目录设置为它正在启动的应用程序的目录?默认情况下,根路径将设置为“Environment.CurrentDirectory”,这可能正确也可能不正确。

如果使用 CurrentDirectory 不可行,那么您可以切换到嵌入式 View (有关如何在主要解决方案中执行此操作的示例),或者将 IRootPathProvider 的实现添加到您的项目并返回程序集位置(它将自动选择你的默认版本)

关于c# - 使用 Nancy self host + TopShelf 的空白回复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6469163/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com