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