gpt4 book ai didi

c# - 部署到 Azure - 无法连接到数据库

转载 作者:行者123 更新时间:2023-11-29 01:15:48 25 4
gpt4 key购买 nike

我最近订阅了 Azure 免费试用版,目前正在尝试发布我的网站。

但是,当我发布网站时,我遇到了以下错误:

[NullReferenceException: Object reference not set to an instance of an object.]
MySql.Data.MySqlClient.MySqlProviderServices.GetDbProviderManifestToken(DbConnection connection) +56
System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) +276
System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection) +27
System.Data.Entity.Infrastructure.<>c__DisplayClass1.<ResolveManifestToken>b__0(Tuple`3 k) +32
System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) +72
System.Data.Entity.Infrastructure.DefaultManifestTokenResolver.ResolveManifestToken(DbConnection connection) +251
System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest) +56
System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) +43
System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) +62
System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) +123
System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +610
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +18
System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() +53
System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() +15
System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() +38

当我使用远程数据库的连接字符串在本地运行它时,它工作正常,但一旦我发布它,它就不起作用。

我的连接字符串如下所示:

<add name="DefaultConnection" connectionString="user id=****;password=****;persistsecurityinfo=False;server=**** ;database=iprospect_tools" providerName="MySql.Data.MySqlClient" />
<add name="ToolsEntities" connectionString="metadata=res://*/ToolsModel.csdl|res://*/ToolsModel.ssdl|res://*/ToolsModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;user id=****;password=****;persistsecurityinfo=False;server=****;database=tools&quot;" providerName="System.Data.EntityClient" />

当我远程调试我的应用程序时,这是错误评估:

enter image description here

知道什么可能导致此错误吗?

最佳答案

您的问题中缺少一些信息,这将使提供简洁的答案变得更容易,但这是我要做的:

  1. 找出数据库的托管位置

这里要做的第一件事是弄清楚您的 MySQL 数据库使用什么服务。在 Azure 中,至少有四种方法来托管 MySQL 数据库,每种方法可能需要不同的步骤。

  • 应用中的 MySQL由于您是从桌面进行远程连接,所以我认为您没有使用此选项。

  • ClearDB 提供的 MySQL 如果您使用它,那么服务器名称将类似于:us-cdbr-azure-*.cloudapp.net

  • 微软提供的MySQL 如果您使用它,那么服务器名称将类似于:*.mysql.database.azure.com

  • MySQL 托管在 IaaS 虚拟机中 如果您使用它,那么服务器名称将类似于:*.cloudapp.net

如果数据库未托管在 Azure 中,则应检查网络配置。

  • 创建一个尽可能简单的应用来测试连接性。
  • 假设您的数据库托管在 Azure 中,下一步是减少依赖项,以确定问题是否出在数据库服务器、网络配置、代码或其他依赖项上。

     string myConnectionString = "your-connectionstring-goes-here";
    try{
    using (var con = new MySqlConnection { ConnectionString = myConnectionString }){
    con.Open();

    if (!con.Ping()){
    System.Diagnostics.Trace.TraceError("MySQL Ping Failed:");
    }
    else{
    System.Diagnostics.Trace.TraceInformation("MySQL Successfull");
    }
    }
    }
    catch (Exception exep){
    System.Diagnostics.Trace.TraceError("Could not connect to MySQL: " + exep.Message);
    }

    请注意,在此示例中,我们将连接字符串硬编码到代码中以绕过 Web 配置。

    如果这有效,那么我们就知道与数据库的连接良好,并且应用程序服务应用程序可以访问数据库。跳过步骤(3),进入步骤(4)

    如果它不起作用,那么我们还需要进行更多调试。转到步骤(3)

  • 修复数据库服务器上的网络/防火墙

    • 如果您的数据库由 Microsoft MySQL 托管,请检查以确保防火墙允许您的应用连接到它并重复步骤 (2)

    • 如果您的数据库托管在 IaaS 虚拟机中,请确保端口和网络开放以接受连接并重复步骤 (2)

  • 完成步骤 (2) 后,再次尝试使用您的代码。

  • 调试代码
  • 一旦步骤 (2) 正常工作,就可以排除连接问题。这意味着错误存在于您的代码、连接字符串配置或您使用 Entity Framework 的方式中。

    希望这有帮助

    关于c# - 部署到 Azure - 无法连接到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45591130/

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