Déterminer corriger connectionString pour la publication web ASP.NET MVC de l'application
Au cours du développement de l'ASP.NET MVC de l'application sur l'ordinateur local, j'ai utilisé ce connectionString
avec aucun problème:
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\AppDb.mdf;Initial Catalog=AppDb;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>
Dans le service d'hébergement de la base de données du panneau de contrôle que je peux obtenir de la chaîne de connexion à mon MSSQL(j'ai choisi SQL Server 2012 de la base de données, mais je peux choisir 2014 si ça aide). Ils disent chaîne de connexion est:
"Data Source=SQL5013.myASP.NET;Initial Catalog=DB_9B42A0_baza;User Id=DB_9B42A0_baza_admin;Password=YOUR_DB_PASSWORD;"
Info sur mon MSSQL base de données:
Server name : SQL5013
Server version : Microsoft SQL Server 2012 - 11.0.5058.0 (X64)
May 14 2014 18:34:29
Standard Edition (64-bit) on Windows NT 6.3 (Build 9600: )
Database name:DB_9B42A0_baza
Server URL:SQL5013.myASP.NET
Login name:DB_9B42A0_baza_admin
Ma demande est ASP.NET-MVC5.1 avec Entity Framework 6.
Ici, c'est ce que j'ai essayé:
Tentative 1
Ajouté cette définition de la connexion entre <connectionStrings> </connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=SQL5013.myASP.NET;Initial Catalog=DB_9B42A0_baza;User Id=DB_9B42A0_baza_admin;Password=12345678;" providerName="System.Data.SqlClient" />
Résultat quand j'accède à mon site web:
Exception Details: System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0.
Tentative 2
<add name="DefaultConnection" connectionString="Provider=sqloledb;Data Source=SQL5013,1433;Initial Catalog=DB_9B42A0_baza;User Id=DB_9B42A0_baza_admin;Password=12345678;" providerName="System.Data.SqlClient" />
Résultat quand j'accède à mon site web:
Exception Details: System.ArgumentException: Keyword not supported: 'provider'.
Tentative 3
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\AppDb.mdf;Initial Catalog=AppDb;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
Plus en WebApplication2(c'est le nom de mon ASP.NET-application MVC) propriétés:
Résultat quand j'accède à mon site web:
Exception Details: System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0.
Tentative 4 (basé sur le premier exemple de http://www.connectionstrings.com/sqlconnection/)
<add name="DefaultConnection" connectionString="Server=SQL5013.myASP.NET;Database=DB_9B42A0_baza;User Id=DB_9B42A0_baza_admin;Password=12345678;" providerName="System.Data.SqlClient" />
Résultat quand j'accède à mon site web:
Exception Details: System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0.
Résumé:
J'ai essayé beaucoup de choses pour le faire fonctionner pendant les 3 derniers jours que je ne m'en souviens pas. J'ai lu beaucoup d'articles MSDN et pas de chance. Si je peux fournir plus d'informations à propos de la base de données ou de l'application s'il vous plaît dites, je mettrai à jour le post d'ici peu.
Question:
Que dois-je écrire dans <connectionStrings> </connectionStrings>
seciton pour faire la connexion de base de données de travail après que je les publie?
informations Supplémentaires:
Mon Web.config
fichier est:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\AppDb.mdf;Initial Catalog=AppDb;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<customErrors mode="Off"/>
</system.web>
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" />
</system.web>
<system.webServer>
<modules>
<remove name="FormsAuthenticationModule" />
</modules>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
Update -> code resposible pour la base de données
Application_Start
dans Global.asax
namespace WebApplication2 {
public class MvcApplication : System.Web.HttpApplication {
protected void Application_Start() {
System.Diagnostics.Debug.WriteLine("Application_Start");
Database.SetInitializer(new MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration>());
new ApplicationDbContext().Database.Initialize(true);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
}
et la Configuration/Migrations.cs
fichier:
namespace WebApplication2.Migrations {
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using System;
using System.Collections.Generic;
using System.Data.Entity.Migrations;
using System.Data.Entity.Validation;
using System.Linq;
using WebApplication2.Models;
internal sealed class Configuration : DbMigrationsConfiguration<WebApplication2.Models.ApplicationDbContext> {
public Configuration() {
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
ContextKey = "WebApplication2.Models.ApplicationDbContext";
}
protected override void Seed(WebApplication2.Models.ApplicationDbContext context) {
System.Diagnostics.Debug.WriteLine("SEED STARTED");
}
}
}
et Models/IdentityModels.cs
où est mon DbContext
définis:
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System;
using System.Collections.Generic;
namespace WebApplication2.Models {
// You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
public class ApplicationUser : IdentityUser {
USER PROPERTIES HERE
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) {
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser> {
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false) {
System.Diagnostics.Debug.WriteLine("CONSTRUCTOR");
Configuration.LazyLoadingEnabled = true;
Configuration.ProxyCreationEnabled = true;
}
DBSETS HERE
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Person>().HasMany(p => p.Answers).WithMany(a => a.Persons);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
public static ApplicationDbContext Create() {
return new ApplicationDbContext();
}
}
}
note
Je ne suis pas éligible pour commencer bounty avant les 2 jours à partir de poser une question, mais si cela peut vous aider je vous offre 500 points de réputation pour le travail de la chaîne de connexion (je vais l'accorder quand le bounty sera possible). C'est trop dur pour moi et j'ai essayé de nombreuses choses pour les 3 jours.
- La meilleure ressource pour la chaîne de connexion est connectionstrings.com
- Je vous remercie. J'ai été là avant. J'ai ajouté
Attempt 4
pour le Post Original basé sur leur syntaxe. Peut-être il ya quelque chose de mal dans mon Web.config Entité Cadre de sections? En local tout fonctionne toujours, SANS exception, à tous(avec LocalDb connexions chaîne que j'ai posté en haut de l'Original Post), jamais. C'est mon site: informatyka4444-001-site1.myasp.net - Pouvez-vous montrer le code que vous utilisez pour récupérer et utiliser la chaîne de connexion?
- Je pense que je ne comprends pas. Ne vous demandez comment je générer la chaîne de connexion que j'ai mis dans le Web.config?
- Non, le code C# qui utilise la chaîne de connexion.
- Ok, je pense que je l'ai posté en bas de OriginalPost. J'ai enlevé la Graine méthode contenu c'est trop long à poster sur DONC. Également supprimé DB_SETS et les propriétés de l'utilisateur.
- Je pense qu'il pourrait être la chose que vous demandez:
public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false)
mais je ne suis pas sûr. Il est au bas de l'OP dans le dernier code de la citation. C'est ma première publication web. - Laissez-nous continuer cette discussion dans le chat.
- Avez-vous obtenir n'importe où avec ça?
- Oui, je l'ai fait, je vais mettre à jour l'objet aujourd'hui et commencez à le bounty comme je l'ai dit. Tony Stark solution fonctionne comme un charme(mettre de l'hébergeur de la Chaîne de connexion dans l'onglet Paramètres de Pubish Menu Web)mais je voudrais savoir que faut-il générer de l'intérieur:
<connectionStrings> </connectionStrings>
lors de la publication. Je le mettrai à jour aujourd'hui. En d'autres termes, je voudrais savoir quelle chaîne de connexion suppose d'être enWeb.config
pour le faire publier sans ces changements dans l'onglet Paramètres de la publication Web. - woohoo, heureux de savoir que ma suggestion travaillé et merci d'avance pour votre générosité. Pour répondre à ur questions - 1. en quoi est-il de générer à l'intérieur de: <connectionStrings> </connectionStrings> lors de la publication? - le magicien du fait de la transformation/remplacer de la sélection de la chaîne de connexion pendant le déploiement. Cela se produit uniquement lorsque vous publiez sur le web. L'option n'est pas disponible si la publication est faite à un système de fichiers. 2. quelle chaîne de connexion suppose être dans le Web.config pour le faire publier sans ces changements dans l'onglet Paramètres de la publication Web? point ur config à destination de la connexion ou de l'utilisation d'une transformation.
- J'ai le sentiment que votre problème a été [providerName="le Système de.Les données.SqlClient"] dans le web.config - suppression il pourrait résoudre le problème 🙂
- Supprimer ce a été à l'origine erreur qui dit qu'il y supposé être providerName.
- Après la publication du projet, ftp sur le serveur et tirez sur le web.config du fichier et de l'ouvrir dans un éditeur de texte. Je serais très intéressé de savoir ce qui est dans ce fichier que votre connectionString. Je soupçonne que VS est en cours d'exécution certains publient des transformations est de le jeter hors.
Vous devez vous connecter pour publier un commentaire.
Chaîne de connexion dans la Tentative 2 est incorrecte, le message d'erreur indique. Chaîne de connexion dans la Tentative 3 est orientée vers le local. Cependant Tentative de 1 & 4 semble parfaitement valable.
Avez-vous essayé de la publication du site web à l'aide de
right click on the project-->Publish
au lieu d'aller àproject properties-->Package/Publish SQL
?Veuillez noter que lors de l'utilisation de
Project properties-->Package/Publish SQL
, il n'a pas de mise à jour sur le web.config sur la destination et auront besoin d'une configuration web de transformer. Si vous n'avez pas utilisé une transformation, la chaîne de connexion sera pointant vers celui que vous aviez dans votre local.À l'aide de
right click on the project-->Publish
vous pouvez fournir la destination de la chaîne de connexion, tester et puis peut même faire cette mise à jour de laweb.config
cours de déploiement. S'assurer que leUse this connection string at runtime (update destination web.config)
est cochée.Mise à JOUR:
En ce qui concerne votre question - "pourquoi mes tentatives précédentes ont échoué?"
Comme ci-dessus, tentative de 1 & 4 semble que vous avez obtenu une chaîne de connexion valide, mais encore obtenir l'erreur
System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0
.Il semble que cette erreur peut se produire pour diverses raisons, comme des questions similaires posées ici et ici ont des solutions différentes. Mais plus probablement, c'est vers le bas pour une chaîne de connexion incorrecte.
La seule façon de s'en assurer est, pour vérifier ce qu'il y a dans votre site web.config après déploiement, de publier de service d'hébergement. Si vous êtes sûr que le web.config après le déploiement avait la même chaîne de connexion en tant que tentative de 1 & 4, alors c'est étrange en effet.
Aussi, dans la tentative 3, le
Connection string for destination database
est différent de vos autres chaînes de connexion et est-ce testé? Cela et le fait que la publication web de méthode comme je l'ai mentionné ci-dessus a travaillé au lieu d'utiliserPackage/Publish SQL
me fait penser que la base de données n'ont pas été déployées dans vos précédentes tentatives. Pourquoi ne pas répéter la même procédure, mais de le déployer à l'emplacement où vous avez accès au web.config et également vérifier si la db est déployé avec succès?Maintenant, sur "comment l'article ou site Web.config devrait exactement regardez comme dans mon cas pour faire de travail de base de données après la publication de l'application web sur le serveur, sans rien ajouter à Publier le site Web de l'onglet Paramètres?"
En ne définissant pas quoi que ce soit dans
Database
section de laSettings
ongletPublish Web
outil de votre base de données ne seront pas déployées. Je ne suis pas sûr que vous voulez le faire étant donné que vous êtes en utilisant des migrations.Mais si vous envisagez de déployer votre base de données séparément pour quelles raisons, alors vous avez besoin pour appliquer des transformations à votre site web.config pour le faire automatiquement modifier la chaîne de connexion lors de la publication.
Plus d'informations sur la façon de faire web.config transformation peut être trouvé ici.
Les pages suivantes sont excellent endroit pour comprendre le web et base de données de publier
Espère que cette aide.
<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=SQL5013.myASP.NET;Initial Catalog=DB_9B42A0_baza;User ID=DB_9B42A0_baza_admin;Password=12345678;MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/> <add name="DefaultConnection_DatabasePublish" connectionString="Data Source=SQL5013.myASP.NET;Initial Catalog=DB_9B42A0_baza;User ID=DB_9B42A0_baza_admin;Password=12345678" providerName="System.Data.SqlClient"/> </connectionStrings>
Publish
outil. LeDefaultConnection
est utilisé par l'application web etDefaultConnection_DatabasePublish
est créé pendant le déploiement pour le premier code migrations à la mise à jour de la db de schéma et de semis. Le déploiement de la méthode que vous utilisez actuellement est parfaitement valide, mais si vous êtes désireux de trouver pourquoi votre première approche n'a pas fonctionné, alors vous devrez refaire les mêmes étapes et vérifier les configs et db. La cause de cette erreur pourrait être la chaîne de connexion utilisée par l'application web à l'époque, est incorrecte ou peut-être la db n'a pas été déployée.Ce n'est pas exactement un correctif mais vous permettra de tester la chaîne de connexion, abstrait en dehors de tout ce qui code pour valider que votre chaîne de connexion en elle-même est ou n'est pas de travail. Cela devrait aussi vous donner un moyen de le tester plus rapidement.. publier vos résultats et je vais voir si je peux contribuer plus.
Sur le serveur à l'aide de LinqPad, ou, techniquement, vous pouvez créer une page de test dans votre application avec une zone de texte pour vous coller votre chaîne de connexion pour tester et ensuite l'exécuter contre le code suivant.
C'est le code minimal nécessaire, si vous pouvez faire ce travail avec votre chaîne de connexion que vous savez quelque chose d'autre se passe, sinon, il vous donne un moyen rapide pour pousser jusqu'à ce qu'il fonctionne.