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

时间:2017-02-16 17:57:31

标签: c# asp.net entity-framework azure

我使用ASP.NET Web API,实体框架和Microsoft Azure上托管的SQL数据库创建了一个REST API。我使用Code首次迁移。

这是用户模型类

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();

        }
    }
}

问题出现在哪里。当我在本地服务器上运行代码并对localserver / Trivia / Users进行GET调用时,将返回来自Azure SQL数据库的正确用户列表。

但是,在发布到Azure之后,完全相同的代码会返回一个空的Users列表。我打电话给http:// {myappname} .azurewebsites.net / Trivia / Users。

<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>

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

1 个答案:

答案 0 :(得分:1)

我和Steve G在一起。我认为识别/解决此问题的简单方法是使用远程调试器并检查错误:

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