ServiceStack 和 Kestrel:使用 .Map 函数根据路径(中间件)路由到 ServiceStack 实例?
ServiceStack and Kestrel: Using the .Map function to route to ServiceStack instances based on path (middleware)?
我们正在研究 .NET Core 和 Kestrel 并使用 ServiceStack。
添加服务栈很简单,使用扩展方法:
app.UseServiceStack(new AppHost {
AppSettings = new NetCoreAppSettings(Configuration)
});
但是,我们正在考虑启动几个不同的 AppHostBase 实现(因此我们可以选择以不同的方式处理事情),但它们都共享相同的网络服务器、端口等,因为 Kestrel 是基础。
当时的想法是 Kestrel 应该将传入的 http 请求路由到正确的 AppHostBase,使用 .Map (middleware) 听起来是个不错的方法:
app.Map("/map2", HandleMapTest2);
但是,我不确定如何使用 Servicestack 来实现。 Servicestack中Map没有ext方法,使用上面的.Map函数,第二个参数为Action<IApplicationBuilder>
.
我查看了 the source code,我发现 AppHostBase.Bind(IApplicationBuilder) 最终会执行 app.Use(...)
这不是我们想要的。
那么,如何使用 Map 函数并将请求路由到不同的 AppHostBase 实现?
更新
Mythz 说只有一个 ServiceStack 实例是可能的。但是我怎样才能使用 Map 将特定的子路径路由到一个 ServiceStack 实例,例如“/ss”转到 SS 实例,但其他东西转到其他地方?
However, we are looking into starting several different AppHostBase
implementations
您不能有多个 ServiceStack 的 AppHost,一个 .NET Core 进程中只能有 1 个单例实例。
如果您的服务实现在不同的程序集中,您可以register them with your AppHost Contructor。
将ServiceStack配置为运行在不同路径上的方法是设置Config.HandlerFactoryPath
,例如:
SetConfig(new HostConfig {
HandlerFactoryPath = "/map2"
})
我们正在研究 .NET Core 和 Kestrel 并使用 ServiceStack。
添加服务栈很简单,使用扩展方法:
app.UseServiceStack(new AppHost {
AppSettings = new NetCoreAppSettings(Configuration)
});
但是,我们正在考虑启动几个不同的 AppHostBase 实现(因此我们可以选择以不同的方式处理事情),但它们都共享相同的网络服务器、端口等,因为 Kestrel 是基础。
当时的想法是 Kestrel 应该将传入的 http 请求路由到正确的 AppHostBase,使用 .Map (middleware) 听起来是个不错的方法:
app.Map("/map2", HandleMapTest2);
但是,我不确定如何使用 Servicestack 来实现。 Servicestack中Map没有ext方法,使用上面的.Map函数,第二个参数为Action<IApplicationBuilder>
.
我查看了 the source code,我发现 AppHostBase.Bind(IApplicationBuilder) 最终会执行 app.Use(...)
这不是我们想要的。
那么,如何使用 Map 函数并将请求路由到不同的 AppHostBase 实现?
更新
Mythz 说只有一个 ServiceStack 实例是可能的。但是我怎样才能使用 Map 将特定的子路径路由到一个 ServiceStack 实例,例如“/ss”转到 SS 实例,但其他东西转到其他地方?
However, we are looking into starting several different AppHostBase implementations
您不能有多个 ServiceStack 的 AppHost,一个 .NET Core 进程中只能有 1 个单例实例。
如果您的服务实现在不同的程序集中,您可以register them with your AppHost Contructor。
将ServiceStack配置为运行在不同路径上的方法是设置Config.HandlerFactoryPath
,例如:
SetConfig(new HostConfig {
HandlerFactoryPath = "/map2"
})