4 votes

Accès aux services Web SharePoint via Silverlight

J'ai un problème pour accéder au Webservice SharePoint via Silverlight.

Une erreur s'est produite lors de l'envoi d'une requête à l'URI ' http://sample:8000/_vti_bin/Authentication.asmx '. Cela peut être dû à la tentative de d'accéder à un service d'une manière inter-domaine sans qu'une politique inter-domaine appropriée en place, ou une politique qui est inadaptée aux services SOAP. Vous pouvez besoin de contacter le propriétaire du service pour publier une et s'assurer qu'il autorise l'envoi d'en-têtes HTTP liés à SOAP. Veuillez consulter l'exception interne pour plus de détails.

Quelques questions :

  1. Comment puis-je déployer correctement clientaccesspolicy.xml sur Sharepoint Designer ? Il suffit d'ouvrir le site dans le designer, d'ajouter le fichier et de le publier ?
  2. Le site où le clientaccesspolicy.xml doit être déployé utilise l'authentification par formulaire. Je n'ai pas été en mesure d'utiliser Sharepoint Designer pour y publier. Pour cette raison, j'ai créé une nouvelle zone pour ce site, qui utilise l'authentification Windows et j'y ai publié clientaccesspolicy.xml. Les deux utilisent la même base de données de contenu, n'est-ce pas ?
  3. Si le fichier clientaccesspolicy.xml est publié, comment puis-je permettre l'accès anonyme à ce fichier ?

Salutations Anton Kalcik

1voto

Wodzu Points 101

Voici les réponses à mes questions 1. et 2 :

  1. Dans Sharepoint Designer, vous ouvrez le site par : Fichier -> Ouvrir le site -> Dans le champ de texte "Nom du site :", tapez l'URL de votre site. Ensuite, faites glisser et déposez clientaccesspolicy.xml dans la racine de votre site.
  2. Si vous disposez de l'authentification par formulaire, vous n'avez pas besoin de créer une nouvelle zone à cette étape (mais pour certaines raisons, cela peut être utile). Il vous suffit d'ouvrir un navigateur web et de taper l'URL de votre site. Ensuite, remplissez les champs de texte (toujours avec un utilisateur qui a des privilèges d'administrateur) et cochez "Sign me in automatically". Après cela, le concepteur Sharepoint utilisera ces informations d'identification pour l'URL spécifiée.

Si vous pouvez m'aider à répondre à la question 3, ou si vous avez une autre solution, comment puis-je accéder à clientaccesspolicy.xml depuis Silverlight, postez-la !

1voto

Bryant Points 7185

La façon dont nous avons géré cela dans notre projet était d'utiliser un gestionnaire HTTP. Nous avons placé le fichier clientaccesspolicy.xml dans le répertoire _layouts (qui est partagé entre les sites Sharepoint) à l'aide d'une fonctionnalité (vous pouvez également le copier manuellement).

Puis nous avons ajouté notre gestionnaire HTTP à la section des gestionnaires de web.config. Dans notre gestionnaire, nous vérifions si la demande concerne le fichier /clientaccesspolicy.xml et si c'est le cas, nous réécrivons le chemin :

if (path.ToLowerInvariant() == "/clientaccesspolicy.xml")
{
    HttpContext.Current.RewritePath("/_layouts/clientaccesspolicy.xml");
}

Je ne suis pas sûr que cela permette de contourner la sécurité, donc il se peut que cela ne réponde pas entièrement à votre problème. Mais au moins, cela vous donne une méthode pour accéder à ce fichier.

0voto

Robert MacLean Points 18288
  1. C'est bien.
  2. Il devrait l'être, à condition que vous n'ayez pas créé un tout nouveau site.
  3. Il ne devrait pas l'être, car ce serait un risque pour la sécurité. Si vous devez vous authentifier via WindowsAuth pour les services, vous devez également le faire pour le fichier clientaccesspolicy.xml.

0voto

Gardez à l'esprit que le fichier clientaccesspolicy.xml doit se trouver à l'adresse suivante domaine Racine . Dans votre exemple, il devrait être disponible auprès de http://sample:8000/clientaccesspolicy.xml . Si vous ne pouvez pas l'ouvrir à partir de votre navigateur à cette URL, votre client Silverlight ne le trouvera pas non plus.

Le moyen le plus simple de placer le fichier au bon endroit est de le copier via FTP ou l'explorateur. Le fichier doit être accessible aux utilisateurs anonymes (en lecture seule bien sûr).

0voto

devi Points 1008

J'ai trouvé une façon plus réaliste d'implémenter le httpHandler de Sharepoint : il retourne tout le contenu de clientaccesspolicy.xml lui-même.

        public void ProcessRequest(HttpContext context) {
        if (context.Request.Path.ToLowerInvariant() == "/clientaccesspolicy.xml")            {
            context.Response.Write(@"<?xml version='1.0' encoding='utf-8' ?><access-policy><cross-domain-access> "+
            @"<policy> <allow-from http-request-headers='*'> <domain uri='*' /> </allow-from> <grant-to> "+
            @"<resource path='/' include-subpaths='true' /> </grant-to> </policy> "+
            @"</cross-domain-access> </access-policy>");
        }
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X