首页 > 代码库 > ServiceStack.RabbitMQ在站点中使用时导致静态页面无法正常解析
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在站点中使用时导致静态页面无法正常解析
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。