【发布时间】:2013-11-29 06:09:13
【问题描述】:
好的,这真的令人沮丧,我希望有人可以帮助我。我刚刚开始阅读一些 SignalR 教程,所有这些都很好。然后我决定添加一个 MVC 实体框架模型,以便对我的 SignalR 项目进行一些数据访问,这样我就可以存储已发送到我的测试聊天消息中心的名称和消息。
这是令人沮丧的部分,当我在 Visual Studio 中进行调试时,这一切都很好,但是一旦我发布到我的 IIS 服务器,我的消息中心中的实体框架代码就会停止工作并抛出这个错误:ProviderIncompatibleException
内部异常: "{"从数据库获取提供者信息时出错。这可能是由 Entity Framework 使用不正确的连接字符串引起的。检查内部异常以获取详细信息并确保连接字符串正确。"}"
下一个内部异常: {“提供者没有返回 ProviderManifestToken 字符串。”}
最后一个内部异常: {“建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。未找到或无法访问服务器。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序: SQL 网络接口,错误:50 - 发生本地数据库运行时错误。LocalDB 实例启动期间发生错误:SQL Server 进程无法启动。\r\n)"}
这个错误是在“db.Database.Initialize(false);”上抛出的我的消息中心代码中的行。
这让我非常沮丧,以至于我昨晚一直在研究这些错误消息,直到凌晨 1:00。我真的很感激这方面的任何帮助。最令人沮丧的是这段代码太简单了,它应该可以工作......
谢谢。
这是我的消息中心的代码:
public class BPACustomerServiceMessageHub : Hub
{
public void Send(string name, string message)
{
Database.SetInitializer(new CreateDatabaseIfNotExists<MessagesContext>());
using (MessagesContext db = new MessagesContext())
{
db.Database.Initialize(false);
Messages omsg = new Messages();
omsg.name = name;
omsg.message = message;
db.Messages.Add(omsg);
db.SaveChanges();
db.Dispose();
}
// Call the broadcastMessage method to update clients.
Clients.All.broadcastMessage(name, message);
SendParams mparams = new SendParams();
mparams.Name = name;
mparams.Message = message;
Clients.All.broadcastMessage2(mparams);
}
}
public class SendParams
{
public string Name { get; set; }
public string Message { get; set; }
}
这是我的模型和上下文的代码:
public class Messages
{
[Key]
public int id { get; set; }
public string name { get; set; }
public string message { get; set; }
}
public class MessagesContext : DbContext
{
public DbSet<Messages> Messages { get; set; }
}
这是我的 web.config 中的连接字符串:
<connectionStrings>
<add name="MessagesContext"
connectionString="Data Source=(LocalDB)\v11.0;
database=Messages;
AttachDbFilename=|DataDirectory|\Messages.mdf;
Initial Catalog=Messages;
Integrated Security=True"
providerName="System.Data.SqlClient" />
【问题讨论】:
-
你的数据库有适当的权限吗?如果我记得的话,IIS 将 IUSR_MachineName 用于 ASP.NET 应用程序
-
尝试在您正在使用的 IIS 应用程序池中启用 32 位应用程序。右键单击池 -> 高级设置 -> 启用 32 位应用程序。
-
@musical_coder - 我已经在应用程序池中设置了允许 32 位。
-
@SystemDown - 我的应用程序池和应用程序分配给一个特定用户,该用户可以完全控制应在其中创建 mdf 的文件夹。
标签: c# asp.net-mvc signalr signalr-hub signalr.client