繁体   English   中英

ASP.NET Web API服务器代码在本地运行时连接到数据库,但在Azure上托管时不连接到数据库

[英]ASP.NET Web API server code connects to database when run locally, but not when hosted on Azure

我使用ASP.NET Web API,实体框架和Microsoft Azure上托管的SQL数据库创建了REST API。 我使用代码优先迁移。

这是用户模型类

namespace Trivio.Models
{
    public partial class User
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string Password { get; set; }
    }
}

在Trivio.Models.ApplicationDbContext.cs下定义的DbContext

namespace Trivio.Models
{
    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {

        public DbSet<User> UserInformation { get; set; }
        public DbSet<Trivia> Trivia { get; set; }
        public DbSet<TriviaHistoryModel> TriviaHistoryModel { get; set; }
        public ApplicationDbContext()
            : base("DefaultConnection", throwIfV1Schema: false)
        {
        }
        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext();
        }

    }
}

首先,我在localDB上本地创建了迁移。 然后,我将服务器代码更新为Azure并启用了代码优先迁移。 我知道这可行,因为我的Azure SQL数据库填充了正确的数据。 为了测试数据库是否正确托管,我更新了connectionString以连接到Azure SQL数据库

这是Web.config下的连接字符串。 (我已用虚拟数据替换了密码和用户名)

<connectionStrings>
    <add name="DefaultConnection" connectionString="Server=tcp:trivioserver.database.windows.net,1433;Initial Catalog=Trivio;Persist Security Info=False;User ID={mycorrectusername};Password={mypassword};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient"/>
  </connectionStrings>

我在Trivio.Controllers.UserController.cs下的用户API控制器:

namespace Trivio.Controllers
{
    [RoutePrefix("Trivia")]
    public class UserController : ApiController
    {
        private ApplicationDbContext _context;
        public UserController()
        {
            _context = new ApplicationDbContext();
        }
        //------------Routes---------------------------------------------
        //Return List of Users
        [HttpGet]
        [Route("Users")]
        public IEnumerable<User> GetUsers()
        {
            return _context.UserInformation.ToList();

        }
    }
}

这就是问题所在。 当我在本地服务器上运行代码并向本地服务器/ Trivia / Users进行GET调用时,将返回来自Azure SQL数据库的正确用户列表。

但是,发布到Azure之后,完全相同的代码将返回一个空用户列表。 我对http:// {myappname} .azurewebsites.net / Trivia / Users进行了GET呼叫。

<ArrayOfUser xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Trivio.Models"/>

我知道代码已正确托管,因为已加载html代码。

Trivio.Azure下的我的ServiceConfigurationCloud文件

<?xml version="1.0" encoding="utf-8"?>
    <ServiceConfiguration serviceName="Trivio.Azure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2015-04.2.6">
      <Role name="Trivio">
        <Instances count="1" />
        <ConfigurationSettings>
          <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.
                " value="UseDevelopmentStorage=true" />
        </ConfigurationSettings>
      </Role>
    </ServiceConfiguration>

我知道该数据库不是空的,因为我手动检查了它,并且连接到同一数据库的本地服务器代码返回了正确的信息。

我支持史蒂夫·G。 我认为识别/解决此问题的简单方法是使用远程调试器并检查出什么问题了:

https://docs.microsoft.com/zh-CN/azure/app-service-web/web-sites-dotnet-troubleshoot-visual-studio

暂无
暂无

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

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