2017-02-16 4 views
0

Ich habe eine REST-API mit ASP.NET-Web-API, Entity Framework und einer in Microsoft Azure gehosteten SQL-Datenbank erstellt. Ich habe die erste Code-Migration verwendet. HierASP.NET-Web-API-Servercode stellt eine Verbindung zur Datenbank bei lokaler Ausführung her, aber nicht bei gehostetem Azure

ist die User-Modell Klasse

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 unter Trivio.Models.ApplicationDbContext.cs definiert

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

    } 
} 

Zuerst habe ich Migrationen erstellt, lokal auf einem LocalDB. Dann habe ich meinen Servercode auf Azure aktualisiert und die ersten Code-Migrationen aktiviert. Ich weiß, dass dies funktioniert, weil meine Azure SQL-Datenbank mit korrekten Daten gefüllt ist. Um zu testen, ob meine Datenbank korrekt gehostet wurde, habe ich den connectionString aktualisiert, um eine Verbindung mit der Azure SQL-Datenbank herzustellen.

Hier ist die Verbindungszeichenfolge unter "Web.config". (Ich habe ersetzt Passwort und Benutzernamen mit Dummy-Daten)

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

Meine User-API-Controller unter 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(); 

     } 
    } 
} 

Hier ist, wo das Problem auftritt. Wenn ich den Code auf meinem lokalen Server ausführe und einen GET-Aufruf an localserver/Trivia/Users mache, wird die korrekte Liste der Benutzer aus meiner Azure SQL-Datenbank zurückgegeben.

Nach der Veröffentlichung in Azure gibt der exakt gleiche Code jedoch eine leere Benutzerliste zurück. Ich habe einen GET-Aufruf an http: // {myappname} .azurewebsites.net/Trivia/Users gemacht.

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

ich den Code kennen gehostet wird korrekt, weil HTML-Code geladen wird.

Mein ServiceConfigurationCloud Datei unter 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> 

Ich weiß, dass die Datenbank nicht leer ist, weil ich es manuell überprüft und der lokalen Informationen korrekt zu derselben Datenbank kehrt verbunden Servercode.

+0

Ich wette, wenn Sie hinzufügen, Protokollierung (Theres eine Möglichkeit, es über azur ui + Tabellen-Speicher einzurichten), Sie werden sehen, dass es keine 0 Ergebnisse zurückgibt, aber in der Tat Fehler ausgibt und den Fehler nicht öffentlich anzeigt. –

Antwort

Verwandte Themen