gpt4 book ai didi

c# - 为什么这在我从 Visual Studio 调试时有效,但在我部署到 IIS 后却不起作用?

转载 作者:行者123 更新时间:2023-11-30 20:00:46 25 4
gpt4 key购买 nike

好吧,这真的让人很沮丧,我希望有人能帮我解决这个问题。我刚刚开始阅读一些 SignalR 教程,所有这些教程都运行良好。然后我决定添加一个 MVC Entity Framework 模型来访问我的 SignalR 项目的一些数据,这样我就可以存储已发送到我的测试聊天消息中心的名称和消息。

这是令人沮丧的部分,当我从 Visual Studio 调试运行时这一切都很好,但是一旦我发布到我的 IIS 服务器,消息中心中的 Entity Framework 代码就会停止工作并抛出此错误:ProviderIncompatibleException

内部异常:"{"从数据库获取提供者信息时出错。这可能是由 Entity Framework 使用不正确的连接字符串引起的。查看内部异常详情,确保连接字符串正确。"}"

下一个内部异常:{“提供者没有返回 ProviderManifestToken 字符串。”

最后的内部异常:{“建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。未找到服务器或无法访问服务器。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者: SQL 网络接口(interface),错误: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 不支持 LocalDB。您可以使用一些解决方法来使其工作(请参阅 herehere(第二部分)),但它仍然没有涵盖所有情况。

期望您使用 LocalDB 进行本地开发(它针对开发人员工作流程而非生产进行了优化),并且在部署到 IIS 时拥有完整的 SQL Server(或 SQL Server Express)实例。发布项目时,您可以让 web.config 转换根据发布目标修改连接字符串。

关于c# - 为什么这在我从 Visual Studio 调试时有效,但在我部署到 IIS 后却不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20249720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com