我正在尝试为使用 SignalR 的现有数据库和 Web 应用程序开发一个可行的 CI/部署过程。应用程序架构非常复杂,有多个组件监视数据库的变化。
我希望能够使用数据层应用程序框架 (DACFx) 来部署 DACPAC 文件并使用注册过程来检测对数据库架构的进程外更改。目前,因为 SignalR 修改了数据库,所以这是不可能的。
我正在尝试确定是否可以将 SignalR 与数据层应用程序一起成功使用,而不必求助于手动将 SignalR 表添加到架构中。
我在每个组件的 Startup.cs 中使用了类似于以下的SignalR代码:
[assembly: OwinStartup(typeof(MyNamespace.Startup))]
namespace MyNamespace
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
var connectionStringName = ConfigurationManager.AppSettings["SignalR.DatabaseInstanceName"] ?? "MyApp";
var connectionstring = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
var sqlScaleOutConfiguration = new SqlScaleoutConfiguration(connectionstring);
GlobalHost.DependencyResolver.UseSqlServer(sqlScaleOutConfiguration);
app.MapSignalR();
}
}
}
在我的 Web.config 或 app.config 中,我有一个“SignalR”连接字符串,它指向与主应用程序不同的数据库。例如,“MyApp”用于应用程序数据,“SignalR”用于 SignalR 数据。
我的理解是,以这种方式配置 SignalR 时,它将创建:
- 用于跟踪连接的数据库表。
- 对数据库和相关联的清理 SP 的服务订阅。
我遇到的问题是数据库表是在我的主应用程序数据库中创建的,而且 SignalR 似乎没有提供用于取消注册服务的 API。
我做对了吗 - SignalR 是在创建服务订阅还是其他什么?
发生了什么事 - 为什么我的配置被忽略?
是否可以以一种优雅的方式进行清理,或者我是否需要在部署期间手动删除服务订阅?