Deux semaines après sa sortie, je passe enfin sur la nouvelle version de la plateforme de blog en .Net développée par Mads Kristensen.
Je n'ai pas spécialement eu de difficultés pour retrouver la même configuration que précédemment, mon thème a parfaitement été pris en compte et j'ai simplement dû ajouter au code les quelques modifications que j'avais déjà faites auparavant :
- prise en compte des avatars MyBlogLog, en plus de Gravatar,
- modification de la fonctionnalité de certains contrôles,
- import des pages de contacts et d'archive,
- traduction de certains labels oubliés.
Je n'ai pas noté de changements majeurs dans les fonctionnalités visibles, la seule étant le tag cloud auquel j'ai affecté une propriété n'affichant les tags que si ils appartiennent à minimum deux articles. Le reste des modifications intervient surtout au niveau du code, de nouvelles fonctionnalités et de la prise en compte des extensions et contrôles utilisateurs.
Malgré tout, j'ai rencontré quelques obstacles au premier démarrage.
Problème au niveau du fournisseur de données
La première erreur survenue concerne l'accès aux donnés. On a effectivement le choix entre le stockage dans des fichiers XML ou dans une base de données SQL Server (mon choix !).
Le fichier BlogService.cs contient la méthode LoadProviders() qui permet d'utiliser le fournisseur défini dans le fichier de configuration web.config, le problème étant que le provider est incapable de s'initialiser en fonction de ce dernier, ce qui engendre une erreur Unable to load default BlogProvider de type ProviderException.
private static void LoadProviders()
{
// Avoid claiming lock if providers are already loaded
if (_provider == null)
{
lock (_lock)
{
// Do this again to make sure _provider is still null
if (_provider == null)
{
// Get a reference to the <blogProvider> section
BlogProviderSection section = (BlogProviderSection)
WebConfigurationManager.GetSection("BlogEngine/blogProvider");
// Load registered providers and point _provider
// to the default provider
_providers = new BlogProviderCollection();
ProvidersHelper.InstantiateProviders(section.Providers,_providers,
typeof(BlogProvider));
_provider = _providers[section.DefaultProvider];
if (_provider == null)
throw new ProviderException("Unable to load default
BlogProvider");
}
}
}
}
Je n'ai pas été chercher la solution très loin, étant donné que j'utilise le provider sql, je l'ai directement instancié d'après le code ci-dessous :
private static void LoadProviders()
{
// Avoid claiming lock if providers are already loaded
if (_provider == null)
{
lock (_lock)
{
// Do this again to make sure _provider is still null
if (_provider == null)
{
// Load registered providers and point _provider
// to the default provider
_providers = new BlogProviderCollection();
_provider = new Providers.MSSQLBlogProvider();
if (_provider == null)
throw new ProviderException("Unable to load default
BlogProvider");
}
}
}
}
Problème avec la chaîne de connexion sql
Suite à la précédente modification, j'ai ensuite rencontré une erreur au niveau de l'attribution de la chaîne de connexion à ma base de données dans le fichier MSSQLBlogProvider.cs :
public string ConnectionString
{
get
{
return ConfigurationManager.ConnectionStrings[connStringName]
.ConnectionString;
}
}
La variable connStringName est normalement initialisée dans la méthode Initialize(), elle doit contenir le nom de la chaîne de connexion définie dans le fichier web.config. Encore une fois, c'est dans le code que j'interviens en remplaçant la variable par son nom (par défaut, il s'agit de BlogEngine), j'ai donc modifié le code de la manière ci-dessous :
ConfigurationManager.ConnectionStrings["BlogEngine"].ConnectionString;
Mise-à-jour de la base de données
Un script de mise-à-jour pour SQL Server 2005 est disponible chez Al Nyveldt. Mon hébergeur n'étant équipé que de la version 2000 (je suis étonné car c'est bien SQL Server 2005 qui figure dans le pack auquel j'ai souscrit, enfin bref...), le script ne s'exécute pas correctement, ce qui donne lieu aux modifications dans le fichier que j'ai traduit ici.
Mise en production
Comme dans les versions précédentes, une erreur s'affiche lorsque je déploie le site sur le serveur distant, mais il suffit de supprimer la ligne suivante dans le fichier web.config :
<trust level="High" />