2017-02-16 14 views
0

Я создал REST API с использованием ASP.NET Web API, Entity Framework и базы данных SQL, размещенной на Microsoft Azure. Я использовал первую миграцию кода.Код сервера ASP.NET Web API подключается к базе данных при запуске локально, но не при размещении на Azure

Вот класс User Model

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

DbContext определено в Trivio.Models.ApplicationDbContext.cs

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> 

Мой контроллер API пользователя, под Trivio.Controllers.UserController.cs:

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

     } 
    } 
} 

Вот где возникает проблема. Когда я запускаю код на локальном сервере и делаю вызов GET для локального сервера/Trivia/Users, возвращается правильный список пользователей из моей базы данных Azure SQL.

Однако, после публикации в Azure, тот же самый код возвращает пустой список пользователей. Я сделал GET-вызов для 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-код.

Мой ServiceConfigurationCloud файл под Trivio.Azure

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

Я знаю, что база данных не является пустым, потому что я вручную проверил его и локальный код сервера, связанный с той же базы данных возвращает правильную информацию.

+0

Держу пари, если вы добавляете вход (Theres способ установить его с помощью лазурного щ + хранения таблицы), вы увидите, что он не возвращает 0 результатов, но на самом деле является ошибкой и просто не показывает ошибку публично. –

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^