繁体   English   中英

为什么当我从Visual Studio调试但在部署到IIS后无法正常工作时,该方法为什么起作用?

[英]Why does this work when I debug from Visual Studio but doesn't after I deploy to IIS?

好的,所以这真的变得令人沮丧,我希望有人可以帮助我。 我刚刚开始阅读一些SignalR教程,所有这些工作都很棒。 然后,我决定为对SignalR项目的某些数据访问添加MVC实体框架模型,以便我可以存储已发送到我的测试聊天消息中心的名称和消息。

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

内部异常: “ {”从数据库获取提供者信息时发生错误。 这可能是由实体框架使用不正确的连接字符串引起的。 检查内部异常以获取详细信息,并确保连接字符串正确。“}”

Next Inner Exception: {“提供程序未返回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" />

默认情况下,IIS不支持LocalDB。 您可以使用一些变通方法来使其工作(请参阅此处此处 (第II部分)),但它仍未涵盖所有情况。

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

根据Jimmy的建议,我将Release web.config中的连接字符串更改为:

<connectionStrings>
<add name="MessagesContext" 
     connectionString="Data Source=.\SQLEXPRESS;
                       database=Messages;
                       Initial Catalog=Messages;
                       Integrated Security=True" 
     providerName="System.Data.SqlClient" />

再次感谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM