【问题标题】:Failed to load resource: the server responded with a status of 500 () | Oracle & ASP.NET Core MVC 3.1加载资源失败:服务器响应状态为 500 () | Oracle & ASP.NET Core MVC 3.1
【发布时间】:2020-12-17 12:22:43
【问题描述】:

我有一个无法解决的问题。

我已将我的 ASP.NET Framework 项目迁移到 ASP.NET Core,当我启动该项目时,我得到了这些类型的错误:

此页面无法正常工作

localhost 当前无法处理此请求。

HTTP 错误 500

加载资源失败:服务器响应状态为500()

在建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    [...]
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseOracle(Configuration.GetConnectionString("Web:ConnectionString")));
    [...]
}

appsettings.json

[...]
"ConnectionStrings": {
  "Web": {
    "ConnectionString": "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=XX.XX.X.XXX)(PORT=XXXX))(CONNECT_DATA=(SERVICE_NAME=XXX)));User Id=XXXXX;Password=XXXXX;",
    "ProviderName": "Oracle.ManagedDataAccess.Client"
  }
}
[...]

DataAccessLayer.cs

public class DataAccessLayer : IDisposable
{
  private IDatabase _core = null;
  
  public void Dispose() { _core?.Dispose(); }

  public DataAccessLayer() { _core = Load(); }

  private static Database Load()
  {
    // Get Instance of Configuration with appsettings.json
    IConfigurationBuilder cfgBuilder = new ConfigurationBuilder();
    cfgBuilder.AddJsonFile("appsettings.json");
    IConfiguration cfg = cfgBuilder.Build();

    var connectionString = cfg["ConnectionStrings:Web:ConnectionString"];
    var provider = cfg["ConnectionStrings:Web:ProviderName"];
    if (provider != "Oracle.ManagedDataAccess.Client") {
      return null;
    }
    return new Database(connectionString, DatabaseType.OracleManaged, SqlClientFactory.Instance);
  }
  public Client GetClient(string idWorkflow)
  {
    if (!string.IsNullOrEmpty(idWorkflow)) {
      try {
        return _core.FirstOrDefault<Client>(Sql.Builder.Where("ID_WORKFLOW=@0", idWorkflow));
      }
      catch (Exception) {
        return new Client();
      }
    }
    else {
      return new Client();
    }
  }
  [...]
}

你有什么想法吗?

【问题讨论】:

  • Oracle的服务是否开启?而且oracle可能已经过期了,也可能是网络问题,可以用ping连接oracle吗?
  • 是的,我实际上可以 ping Oracle...所以...
  • ef core的版本是多少?试试这个 ConnectionString:Data Source=*.*.*.*;database=dbname;User ID=[username];Password=[password];port=1521
  • @Karney。与此 ConnectionString 相同的错误...我使用 Oracle.EntityFrameworkCore 3.19.80 & NPoco 4.0.2
  • 在迁移数据库(不是从 ASP.NET Framework 项目迁移到 ASP.NET Core)时,迁移文件是否有错误?

标签: c# oracle asp.net-core-mvc named-pipes http-status-code-500


【解决方案1】:

尝试用这个替换你的 Load() 的返回:

return new Database(connectionString, DatabaseType.OracleManaged, new OracleClientFactory());

肯定会更好用^^

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多