带有 SQL Server 的 SignalR Scaleout 提升 Nullable 对象必须有一个值

use*_*780 5 signalr

我希望我的 SignalR 应用程序部署在 webfarm 环境中,所以我使用了带有 SQL 服务器选项的 signalR Scaleout。

我通过指向我的本地数据库进行了测试,它工作正常。但是当我指向我的 PROD db 时,所有必需的数据库表和 SignalR 架构都创建了。但是当客户端第一次点击创建集线器代理时,它失败了,下次尝试时它正在连接。

下面是我从 SignalR.SqlServer 得到的致命异常

Nullable object must have a value.

   at Microsoft.AspNet.SignalR.SqlServer.SqlReceiver.Receive(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
   at System.Threading.ThreadPoolWorkQueue.Dispatch()
Run Code Online (Sandbox Code Playgroud)

Jac*_*ing 6

我刚刚遇到这个问题,查看源代码后发现 Messages_0_Id 如果为空,则需要添加一行。

if((select count(*) from [SignalR].Messages_0_Id) = 0)
begin
    Insert into  [SignalR].Messages_0_Id (PayloadId) values (1)
end
Run Code Online (Sandbox Code Playgroud)

  • 这为我解决了这个问题。谢谢。 (2认同)

Ela*_*son 0

该问题是由于我使用 Web 部署并在部署时启用从 EF 的数据库迁移造成的。

删除数据库并取消选中该选项使其可以正常工作。