Error lors de l’upload de documents avec SharePoint 2013 après SP1 + CU de septembre avec RBS

Après une mise à jour vers SharePoint 2013 SP1 et la Cumulative Update de Septembre 2014, J’ai été confronté à certaines erreurs lorsque les utilisateurs téléchargeaient dans SharePoint des fichiers:

System.Runtime.InteropServices.COMException:
Cannot complete this action.  Please try again

En activant les logs ULS à un niveau plus élevé, j’ai pur trouver cette erreur:

System.Data.SqlClient.SqlException (0x80131904):
The EXECUTE permission was denied
on the object 'rbs_fn_get_blob_reference',
database '***DB Name***', schema 'mssqlrbs'

Après avoir vérifié les erreurs droits mis en place par SharePoint pour les comptes faisant fonctionner les Pools Applicatifs des Application Web, tout était ok:

dbRights

la seul astuce qui m’a permis de faire fonctionner à nouveau le téléchargement et ainsi de laisser les utilisateurs travailler, a été de donner le droit db_owner aux comptes faisant fonctionner les Pool Applicatifs.

Ce n’est bien entendu pas une bonne pratique, mais faute de mieux pour l’instant le système est fonctionnel.

Erreur “Compiler Error Message: CS0234″ lors de l’exécution de votre projet ASP.NET MVC

Après avoir essayé d’utiliser une applicationASP.NET MVC existante, je me suis trouvé en face de l’erreur :

The type or namespace name 'Html' does not exist in the namespace 'System.Web.Mvc' (are you missing an assembly reference?)

I semble que j’avais « juste » à configurer la référence « System.Web.Mvc » en « Copie Locale » à vrai.

Il se trouve que cela était DEJA le cas :)

Il m’a suffit de mettre cette valeur de Coie Locale à faux, de compiler pui de la mettre à nouveau à vrai pour que l’erreur disparraisse !

Happy coding!

Windows Azure Worker Roles et VIP swap

Comme vous devez sûrement déjà le savoir, il n’est pas possible de basculer l’exécution d’une Worker Role entre les slots de Staging et de Production uniquement avec les variables environnementales de Windows Azure.

J’ai donc fait un exemple simple pour permettre à des Worker Roles déployés d’éviter de tourner en concurrent, et ainsi permettre ne de faire tourner un Worker Role que lorsque celui-ci est basculé sur un slot de Production.

Ceci se fait à l’aide de valeurs stockée dans une Table du Table Storage:

  • une entrée par « Version » de » Work Role, pour spécifier aux rôles quelle version doit tourner,
  • une entrée « Globale » pour empêcher la totalité des rôles de fonctionner (exemple : pour mettre à jour un schéma de base de données entre 2 versions).

Dans le cas d’un changement de schéma en base de données, voici quelques slides illustrant le fonctionnement de la solution :

:

Voici le code du projet  que j’ai fait à ce titre,et que vous pouvez réutiliser à souhait pour couvrir ce cas.

Happy coding!

SharePoint 2010 – 2013 Résultats de recherche filtrés avec des claims

J’ai travaillé récemment sur la recherche avec Sharepoint 2013, avec un cas que de nombreux client peuvent avoir à traiter:

  •  SharePoint est accédé depuis des points d’accès internes et externes, mais les données internes doivent uniquement être trouvables lorsque qu’un utilisateur est connecté au réseau interne (Ferme interne non accessible depuis la DMZ).
  • ADFS est utilisé pour authentifier les utilisateur internes (client Certificates) et externes (Form-based authentication).
  • ADFS est aussi utilisé pour augmenter les claims données à SahrePoint avec une claim « AccessLocation » contenant la valeur « Internal » ou « External ».

Continue reading

Résoudre l’accès aux ressources distantes (images) avec ADFS 2.0 et SharePoint 2013 People Search

Dans un environnement SharePoint 2013 utilisant les claims, vous utlisiez probablement des Web Applications Web Applications différentes pour :

Dans un tel scénario, ce que vous allez trouver sur la page de recherche des utilisateurs, ce sont de images qui ne sont pas chargées:

NoUserImage

Ceci se produit car l’authentification ADFS a bien été effectuée sur le site de Search, mais pas sur le site contenant le User Profile. Une requête HTTP seule depuis le site de Search n’est en effet pas capable de gérer l’aller-retour nécessaire pour autentifier l’utilisateur avec des claims.

Il y a de nombreuses solutions pour résoudre ce problème ; ma solution préférée est de forcer l’accès à la Web Application contenant les images à l’aide d’une iFrame, et d’être ensuite notifié par un « PostMessage » depuis l’iFrame pour initier le rechargement des images dans la fenêtre parente.

Continue reading

Windows 8.1 : attentes

Maintenant que Windows 8.1 est annoncé, à quoi pouvons-nous nous attendre ?

Voici ce que je pense faire partie de la nouvelle version de Windows 8.1:

  • Beaucoup de nouvelles APIs : Windows 8 manque de certaines simplifications dans son développement, qui devraient être enrichies de nombreux nouveaux ajouts,
  • De nouvelles tailles de tuiles: comme l’a fait Windows Phone 8, un nouveau set de tailles tuiles pour enrichir encore plus l’interface de Windows 8.1,
  • Performance : comme toute nouvelle version de système, une mise à jour vient aussi avec son lot d’améliorations, surout en ce qui concerne la partie Modern UI, qui est assez récente comparé au noyau de Windows lui-même.

Nous verrons bien d’ici quelques jours !

{« Message »: »An error has occurred. »} en déployant votre site web Windows Azure

Je travaillais ces jours-ci sur le déploiement de quelques sites développés sur MVC4 API Web, en utilisant Entity Framework avec les types spatiaux (types Geometry et Geopraphy).

Tout allait bien sur ma machine de dev, mais cela ne fonctionnait as en déployant ma solution sur Azure.

La plupart de mes appels WebAPIs me donnaient comme erreur: {« message »: « An error has occurred. »}

Cela provient d’une assembly manquante dans les binaires qui sont déployés avec votre site.

Il suffit d’ouvrir votre gestionnaire de packages Nuget, de chercher le package « Microsoft.SqlServer.Types » et de l’ajouter à votre projet.

Tada :)