ServiceStack.RabbitMQ在站点中使用时导致静态页面无法正常解析
Posted 发明轮子的意义是可以更好的理解轮子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ServiceStack.RabbitMQ在站点中使用时导致静态页面无法正常解析相关的知识,希望对你有一定的参考价值。
当站点中集成ServiceStack.RabbitMQ时快速处理异步请求时,官方建议初始化如下:
public class AppHost : AppHostHttpListenerBase { public AppHost() : base("Rabbit MQ Test Host", typeof(HelloService).Assembly) {} public override void Configure(Container container) { container.Register<IMessageService>(c => new RabbitMqServer()); var mqServer = container.Resolve<IMessageService>(); mqServer.RegisterHandler<Hello>(ExecuteMessage); mqServer.Start(); } }
https://github.com/ServiceStack/ServiceStack/wiki/Rabbit-MQ
而当我们默认将此启动程序放入asp.net站点里的global.asa里:
protected void Application_Start(object sender, EventArgs e) { new AppHost().Init(); }
会发现默认的站点里的静态页面无法运行了,经过分析发现:
ServiceStack.HostConfig初始化时,其属性出现问题了
WebHostPhysicalPath = "~".MapServerPath(),
深入看一下MapServerPath的详细实现
public static string MapServerPath(this string relativePath) { return HostContext.IsAspNetHost ? relativePath.MapHostAbsolutePath() : relativePath.MapAbsolutePath(); }
public static bool IsAspNetHost
{
get { return ServiceStackHost.Instance is AppHostBase; }
}
看到这里应该发现了,这个方法判断引起的,因为当前初化的是ServiceStack.AppHostHttpListenerBase,导致HostConfig.WebHostPhysicalPath 的值是不正确的,指向了站点\bin目录了,导致正常的静态资源得不到正确处理。
找到原因了,解决这个问题也就容易多了,直接在上面的初始化方法里加一句:
var cfg = new HostConfig(); cfg.WebHostPhysicalPath = "~".MapAbsolutePath(); SetConfig(cfg);
以上是关于ServiceStack.RabbitMQ在站点中使用时导致静态页面无法正常解析的主要内容,如果未能解决你的问题,请参考以下文章
通过 BroadLeaf 管理站点添加了类别,但无法在站点中查看
如何在由“站点”框架提供支持的多个 Django 站点中获取唯一用户?