好的,这真的令人沮丧,我希望有人可以帮助我。我刚刚开始学习一些SignalR教程,所有这些都很有效。然后我决定添加一个MVC实体框架模型,以便对我的SignalR项目进行一些数据访问,这样我就可以存储已经发送到我的测试聊天消息中心的名称和消息。
这是令人沮丧的部分,当我从Visual Studio运行调试时,这一切都很有效但是当我发布到我的IIS服务器时,我的消息中心中的实体框架代码停止工作并抛出此错误:ProviderIncompatibleException
内部例外: “{”从数据库获取提供程序信息时发生错误。这可能是由实体框架使用不正确的连接字符串引起的。检查内部异常以获取详细信息,并确保连接字符串正确。“}”
下一个内部例外: {“提供程序未返回ProviderManifestToken字符串。”}
最后一次内部异常: {“与SQL Server建立连接时发生与网络相关或特定于实例的错误。未找到服务器或无法访问服务器。验证实例名称是否正确以及SQL Server是否配置为允许远程连接。 :SQL网络接口,错误:50 - 发生本地数据库运行时错误。在LocalDB实例启动期间发生错误:SQL Server进程无法启动。\ r \ n)“}
“db.Database.Initialize(false);”上抛出此错误我的消息中心代码中的行。
这让我非常沮丧,以至于我昨晚一直在研究这些错误消息,直到凌晨1点。我真的很感激任何帮助。而最令人沮丧的是这段代码非常简单,应该只是工作......
感谢。
以下是我的消息中心的代码:
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" />
答案 0 :(得分:7)
默认情况下,IIS不支持LocalDB。您可以使用一些变通方法来使其工作(请参阅here和here(第二部分)),但它仍未涵盖所有情况。
期望您使用LocalDB进行本地开发(它针对开发人员工作流而非生产进行了优化),并在部署到IIS时拥有完整的SQL Server(或SQL Server Express)实例。发布项目时,您可以使用web.config转换修改适合您的发布目标的连接字符串。
答案 1 :(得分:0)
根据Jimmy的推荐,我在我的Release web.config中更改了连接字符串:
<connectionStrings>
<add name="MessagesContext"
connectionString="Data Source=.\SQLEXPRESS;
database=Messages;
Initial Catalog=Messages;
Integrated Security=True"
providerName="System.Data.SqlClient" />
再次感谢。