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);




				
时间: 2024-12-25 13:53:37

ServiceStack.RabbitMQ在站点中使用时导致静态页面无法正常解析的相关文章

解决echart在IE中使用时,在div中添加postion后图表不显示问题

<!-- 为ECharts准备一个具备大小(宽高)的Dom --> <div id="main" style="height:400px;width:1200px;z-index:1;position:absolute;"></div> echart在IE中使用时,在div中添加postion后图表不显示.主要问题是echart在编译后给div增加了filter,使div隐藏起来了,如图: 修改办法的话,当然就是删除啦,一是找到e

SQLite中使用时的数据类型注意

在使用SQLite时,要注意:在SQLite中的Integer类型,对应在C#中需要使用long类型或者Int64 在使用SQLite时,要注意:在SQLite中存放的日期类型必须是如此:yyyy-MM-dd HH:mm:ss 不能加毫秒,而且只能用“-”间隔. 在使用SQLite时,要注意:在SQLite中存放的Bool类型只能使用数字,不能使用'true'或'false'否则无法转换到C#中.读取会出错.

window.location.href 放置在单独的JS文件中使用时问题

场景:假设当前浏览器地址栏的地址是:http://localhost:8888/SSHBoot/tourist/homeMainAction_signInUI.do, 现在我想在点击按钮时定位到“http://localhost:8888/SSHBoot/member/adminMainAction_mainUI.do”这个地址 以下js代码是没问题,将js脚本放置到页面中 <html> <head> <meta http-equiv="Content-Type&q

关于自定义控件在布局文件中使用时提示error: Error parsing XML: not well-formed (invalid token)错误的问题

今天在尝试自定义一个控件后,在布局文件中使用的时候报错 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:carrey="http://schemas.android.com/apk/res/com.example.customview"

c#X509Certificate2 类在IIS服务器中使用时无法找到文件路径问题解决方法

有很多支付类.物联网等平台调用接口时需要用到证书: 通过X509Certificate2 类加载证书在程序发布之后发现无法找到证书路径,但是通过文件查找方法又可以检测到该文件. X509Certificate2 使用方法: X509Certificate2 x509Certificate2 = new X509Certificate2(文件路径, 文件密码); 在本地调试和发布都没有问题,但是通过IIS发布到服务器上之后发现出现找不到文件路径错误.是由于IIS应用程序池中的[加载用户配置文件]选

二次开发时,多次导入CI独立ActiveReocd中使用时出现的错误

1. Fatal error: Cannot redeclare getteampoints() (previously declared in [closed] 使用function_exists()方法,如 if(!function_exists('log_message')){ function log_message($level = 'error', $message, $php_error = FALSE) { if (DB_DEBUG) echo $message . "\n&qu

jsp标签在JavaScript中使用时,可能会出现的一个问题。

直接上代码 1 <script type="text/javascript"> 2 var E = window.wangEditor; 3 var editor = new E('#editor'); 4 // 或者 var editor = new E( document.getElementById('editor') ) 5 editor.create(); 6 $(function () { 7 $("#btn1").click(functio

ios 开发中 动态库 与静态库的区别

使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库,多个应用程序共享内存中得同一份库文件,节省资源 3使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的. 从1可以得出,将整个应用程序分模块,团队合作,进行分工,影响比较小. 等其他好处, 从2可以看出,其实动态库应该叫共享库,那么从这个意义上来说,苹果禁止iOS开

getContext在谷歌浏览器中,使用时要先加载canvas对象,否则会提示&#39;getContext is null&#39;

<body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #c3c3c3;"> Your browser does not support the canvas element. </canvas> <script type="text/javascript">