Dépannage des compléments SharePoint à haut niveau de fiabilité

Utilisation de l’outil Fiddler

L’outil Fiddler gratuit peut être utilisé pour capturer les demandes HTTP envoyées par le composant à distance de votre complément à SharePoint.

Il existe une extension gratuite de l’outil qui décode automatiquement les jetons d’accès dans les requêtes.

Une fois Fiddler installé sur le serveur de l'application web, ajoutez le balisage suivant à votre fichier web.config pour que les demandes effectuées à partir de votre application web distante passent par ce proxy. Ainsi, vous pouvez capturer une trace Fiddler et voir la réponse complète de SharePoint lorsqu'une erreur se produit.

Notes

Veillez à supprimer ce balisage si vous n’exécutez pas Fiddler. Si vous ne le faites pas, votre complément ne sera pas en mesure d’effectuer des requêtes HTTP.

<system.net>
  <defaultProxy>
    <proxy usesystemdefault="False" bypassonlocal="False" proxyaddress="http://127.0.0.1:8888" />
  </defaultProxy>
</system.net>

After you have Fiddler installed, you can also check the response headers from SharePoint, which include a request GUID. This request GUID is a correlation ID that you can look up in the logs to find any log errors associated with that request.

Erreur non autorisé 401

Plusieurs éléments peuvent générer une erreur 401 Unauthorized lorsqu'un complément à haut niveau de fiabilité accède à SharePoint pour la première fois. Si vous utilisez le modèle objet côté client (CSOM), l'erreur ressemble à ce qui suit :

[WebException: The remote server returned an error: (401) Unauthorized.]
   System.Net.HttpWebRequest.GetResponse() +8515936
   Microsoft.SharePoint.Client.SPWebRequestExecutor.Execute() +178
   Microsoft.SharePoint.Client.ClientRequest.ExecuteQueryToServer(ChunkStringBuilder sb) +1427
   Microsoft.SharePoint.Client.ClientRequest.ExecuteQuery() +270
   Microsoft.SharePoint.Client.ClientRuntimeContext.ExecuteQuery() +146
   Microsoft.SharePoint.Client.ClientContext.ExecuteQuery() +666
   S2STestWeb.Default.Page_Load(Object sender, EventArgs e) in c:\MyFiles\HightrustTest\HightrustTestWeb\Default.aspx.cs:28
   System.Web.UI.Control.LoadRecursive() +71
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3178

Si vous utilisez le fichier TokenHelper et l'identité Windows, le code qui déclenche l'exception ressemble à ce qui suit :

ClientContext clientContext = 
    TokenHelper.GetS2SClientContextWithWindowsIdentity(sharepointUrl, Request.LogonUserIdentity); 
clientContext.Load(clientContext.Web);
clientContext.ExecuteQuery();

La première chose à faire pour résoudre ce problème est d'utiliser le débogueur Visual Studio pour vérifier que le jeton d'accès et l'objet ClientContext sont construits correctement. Si c'est le cas, étudiez les pistes suivantes :

Problème possible et résolution :

  • Il n’existe aucun profil utilisateur créé pour l’utilisateur qui accède à l’application web à distance. Créez le profil utilisateur.

  • Your add-in does not have permission to the resource you are trying to access. Open the SharePoint Management Shell and run the following Windows PowerShell cmdlet. The variable $web is the SharePoint website you are trying to get access to, and $appPrincipal is the add-in ID. For more information, see Set-SPAppPrincipalPermission.

      Set-SPAppPrincipalPermission -Site $web -AppPrincipal $appPrincipal -Scope Site -Right FullControl
    
  • Votre application web accepte les demandes anonymes. Cela signifie que le jeton d'accès ne contient pas d'identité utilisateur réelle. Vérifiez que l'accès anonyme est désactivé pour le répertoire racine de votre application web distante dans IIS. Vous pouvez également vérifier ce point en déboguant votre application web distante et en vérifiant la valeur de Request.LogonUserIdentity dans le fichier default.aspx.cs (ou .vb) afin de vous assurer qu'il ne s'agit pas d'un utilisateur anonyme.

  • Votre certificat numérique n'a pas été ajouté au magasin de certificats approuvé. Assurez-vous que vous avez suivi les procédures indiquées dans Empaquetage et publication de compléments SharePoint à haut niveau de fiabilité.

Si les noms de domaine dans les fichiers de configuration et les formulaires d'inscription ne correspondent pas, l'autorisation peut être bloquée. Les quatre valeurs suivantes doivent être identiques :

  • Le domaine de complément qui est indiqué lors de l'inscription du Complément SharePoint auprès d'AppRegNew.aspx.

  • Le domaine sous lequel le certificat de sécurité de l’application web distante est enregistré.

  • La partie de domaine de la valeur StartPage dans le fichier AppManifest.xml.

  • La partie du domaine de l’URL de tout récepteur d’événements spécifiés dans le fichier AppManifest.xml.

Dans ce contexte, notez les points suivants :

  • If the remote component of your SharePoint Add-in is using any port other than 443, you must explicitly include the port as part of the domain in all four places; for example, MarketingServer:3333. (You must use the HTTPS protocol, for which the default port is 443.)

  • The domain needs to be hardcoded in the StartPage value (and any event receiver URLs) of the AppManifest.xml file before the add-in is packaged. If you use the Publish Wizard in Visual Studio to package the add-in, you are prompted for the domain, and the Office Developer Tools for Visual Studio inserts it into the StartPage value for you (in place of the ~remoteWebUrl token that is used during debugging. But if you are not using the Publish Wizard, you must manually replace the token with the domain (and protocol); for example https://MarketingServer or https://MarketingServer:3333.

Erreur d’exécution indiquant qu’il n’existe aucun certificat associé à ce numéro de série

If you are sure you have the correct certificate serial number in the web.config, and you can see the certificate in the Windows Certificate Store, there may be a hidden extra character in the serial number in the web.config. This happens if the serial number is copied and pasted from the Microsoft Management Console. Delete the entire serial number value from the web.config and manually retype it.

Voir aussi