none
C# / asp.net, récupérer les listes des collection de sites SharePoint, sous-sites, etc. RRS feed

  • Question

  • Bonjour à tous, je réalise une application web asp.net / C# et j'ai besoin d'interroger un serveur SharePoint afin de récupérer la liste des collections de site et des sous-sites qui s'y trouvent.

    J'ai précédemment crée une application console dans laquelle j'arrive a interroger les sites SharePoint mais en localhost uniquement ! Si j'essai d'interroger un serveur sur le réseau j'ai le message d'erreur suivant:

    "L'application Web est introuvable à l'adresse http://serveur-SharePoint. Vérifiez que l'URL a été correctement entrée. Si l'URL doit héberger un contenu existant, l'administrateur système devra peut-être ajouter à l'application concernée un nouveau mappage pour l'URL de demande."


    Voici mon code:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.SharePoint.Client;
    using Microsoft.SharePoint.Utilities;
    using Microsoft.SharePoint;
    using System.Net;
    using Microsoft.SharePoint.Administration;
    using Microsoft.SharePoint.Security;
    using System.Globalization;
    
    namespace ConsoleApplication_test_sharepoint
    {
        class Program
        {
            static void Main(string[] args)
            {
                string addr;
    
                try
                {
                    addr = "";
                    
                    Console.WriteLine("Adresse du site: \n");
                    addr = Console.ReadLine();
                    Console.WriteLine("Essai de connexion au site: " + addr + "\n");
                    
                    SPWebApplication WebAppli1 = SPWebApplication.Lookup(new Uri(addr));
    
                    SPSiteCollection SC1 = WebAppli1.Sites;
                    Console.WriteLine("Count: {0}", SC1.Count);
    <br/>                foreach (SPSite s in SC1)
                    {
                        Console.WriteLine("Url du site {0}", s.Url);
                    }
               }
    
     catch (System.Exception ee)
                {
                    Console.WriteLine("Erreur: " + ee.Message);
                }
    
                    Console.ReadLine();<br/>        }<br/>    }<br/>}
    

    Lorsque je copie mon code dans mon application web (en changeant les console.Read/Write par des textbox.text et label) je n'arrive même pas a interroger le serveur localhost Sharepoint, j'ai le message d'erreur suivant:

     

    <form id="form1" action="Default.aspx" method="post">
    Erreur: Cette opération ne peut être effectuée que sur un ordinateur lié à une batterie de serveurs par des utilisateurs autorisés dans SQL Server à lire la base de données de configuration. Pour connecter ce serveur à la batterie de serveurs, utilisez l’Assistant Configuration des produits SharePoint situé dans le menu Démarrer dans les produits Microsoft SharePoint 2010.
    Je n'arrive pas a comprendre d'où peut venir le problème...
    Merci d'avance :)
    </form><form id="form1" action="Default.aspx" method="post">
    </form>
    • Déplacé Hengzhe Li mardi 21 février 2012 05:30 merge forum (Origine :Développement Sharepoint 2010)
    mardi 20 décembre 2011 12:50

Réponses

  • si tu veux avoir accès au SharePoint à distance tu n'as qu'un choix possible : les web services.

     

    Dans notre cas, tu as deux types de "web services"

    - le client object model qui est en fait un api qui fait des appels webservices

    - les webservices standard de Sharepoint qui se trouve sous 14/ISAPI/.asmx ou .svc

    Je les connais pas par coeur mais je pense que tu devrais jeter un coup d'oeil côté Webs.asmx.

    L'addresse a utilisé pour faire l'appel serait donc http://tonsite/_vti_bin/Webs.asmx

    Tu peux créer facilement un proxy pour appeler ce web service dans Visual Studio.

    ATTENTION ajoute une Web Reference et pas une Service Reference. Tu trouveras cette option quand tu cliques sur Advanced dans la fenêtre de Add Service Reference.

     


    My SharePoint Blog
    mardi 20 décembre 2011 15:31
  • J'ai oublié de te mettre cette référence

    http://msdn.microsoft.com/en-us/library/webs.webs.getallsubwebcollection%28v=office.12%29.aspx

     

    tu trouveras tous les invoquations que tu peux faire. Celle qui est ouverte par défaut est celle que je pense que tu pourrais utiliser.

     

    hf

     

     


    My SharePoint Blog
    mardi 20 décembre 2011 15:37
  • une dernière solution consiste à coder et déployer votre propre webservice "custom" sur le serveur SharePoint, puis à interroger ce webservice depuis votre autre serveur ou poste client.

    Les avantages sont :

    - Code model objet server (celui que vous avez ecris ds l'appli console) directement utilisable coté webservice

    - API custom donc adaptée à vos besoins

    - la puissance de WCF à portée de main ;)

    Inconvenients :

    - 2 parties à maintenir : coté serveur sharepoint et coté client (serveur asp autre par exemple)

    Un exemple de départ pour mettre en place votre propre webservice : http://www.paslatek.net/deacuteployer-un-service-wcf-custom-sur-sharepoint-2010-20110116-44.aspx

    mardi 3 janvier 2012 08:14

Toutes les réponses

  • ton application doit être hebergée sur un des serveurs de la ferme SharePoint sinon tu n'a aura pas accès à l'object model.

     

    Tu peux par contre utiliser le client object model.

     

    http://msdn.microsoft.com/en-us/library/ee535231.aspx

     

    idem avec ton application console, elle doit être lancée sur un serveur de la ferme ET doit être compilée en 64 bits

     

     


    My SharePoint Blog
    mardi 20 décembre 2011 12:56
  • Merci de ta réponse rapide, peux tu m'en dire d'avantage sur les raisons pour lesquelles je n'ai pas accès ? Est ce possible de contourner ces restrictions par le biais d'un service SharePoint spécifique ?

     

    Avec le client model objet il n'existe pas a ma connaissance d'objet équivalent aux SPWebApplication

     

    Dans mon application je doit partir de WebApplications et récupérer tous les sites et sous-sites qu'elles contient. C'est pour cela que je m'était plutôt orienté vers les objet model SharePoint.


    • Modifié FLAMENT X mardi 20 décembre 2011 14:51
    mardi 20 décembre 2011 14:37
  • si tu veux avoir accès au SharePoint à distance tu n'as qu'un choix possible : les web services.

     

    Dans notre cas, tu as deux types de "web services"

    - le client object model qui est en fait un api qui fait des appels webservices

    - les webservices standard de Sharepoint qui se trouve sous 14/ISAPI/.asmx ou .svc

    Je les connais pas par coeur mais je pense que tu devrais jeter un coup d'oeil côté Webs.asmx.

    L'addresse a utilisé pour faire l'appel serait donc http://tonsite/_vti_bin/Webs.asmx

    Tu peux créer facilement un proxy pour appeler ce web service dans Visual Studio.

    ATTENTION ajoute une Web Reference et pas une Service Reference. Tu trouveras cette option quand tu cliques sur Advanced dans la fenêtre de Add Service Reference.

     


    My SharePoint Blog
    mardi 20 décembre 2011 15:31
  • J'ai oublié de te mettre cette référence

    http://msdn.microsoft.com/en-us/library/webs.webs.getallsubwebcollection%28v=office.12%29.aspx

     

    tu trouveras tous les invoquations que tu peux faire. Celle qui est ouverte par défaut est celle que je pense que tu pourrais utiliser.

     

    hf

     

     


    My SharePoint Blog
    mardi 20 décembre 2011 15:37
  • une dernière solution consiste à coder et déployer votre propre webservice "custom" sur le serveur SharePoint, puis à interroger ce webservice depuis votre autre serveur ou poste client.

    Les avantages sont :

    - Code model objet server (celui que vous avez ecris ds l'appli console) directement utilisable coté webservice

    - API custom donc adaptée à vos besoins

    - la puissance de WCF à portée de main ;)

    Inconvenients :

    - 2 parties à maintenir : coté serveur sharepoint et coté client (serveur asp autre par exemple)

    Un exemple de départ pour mettre en place votre propre webservice : http://www.paslatek.net/deacuteployer-un-service-wcf-custom-sur-sharepoint-2010-20110116-44.aspx

    mardi 3 janvier 2012 08:14
  • Bonjour, merci pour vos réponses, j'arrive a récupérer des résultats mais ils ne sont qu'une partie de ce que j'atendais.

     

    En effet, je souhaite partir de WEB APPLICATION et parcourir tous les sites qu'elles contiennent.

     

    Avec le service web Webs.asmx, j'arrive a récupérer la liste des sous sites d'un site, mais ce serrai pour moi une seconde étape.

     

    Avez vous des idées de la façon dont je pourrai procéder pour arriver a mes fins ?

     

    Suis-je obligé d'utiliser un service WCF ou y a t'il un autre service web du même genre que Webs.asmx ou Lists.asmx ?

     

    Cordialement,


    • Modifié FLAMENT X mercredi 18 janvier 2012 13:08
    mercredi 18 janvier 2012 12:52
  • A ma conaissance (faible) des webservices, vous n'aurez pas de service permettant de lister les SiteCollection d'une WebApplication.

    Les webservices sont automatiquement "scopés" à la collection sur laquelle vous l'invoquez.

    Il faudrait donc un webservices coté Site Central Admin par exemple.... à faire soi même donc peut être... ?

    mercredi 18 janvier 2012 18:04
  • D'accord pour les services web, serrai t'il possible de récupérer la liste des sites webs d'une web applications via le biais de requetes sql sur la base shareopint ?

    Si oui comment ?

     

    Cordialement,

     

    ps: j'ai essayé de développer mon propre webservice mais j'ai les mêmes erreurs qu'au début... (assez logique vu que j'utilise les mêmes objets SPWebApplication, etc.)

    ps2 : Savez vous dans quelles tables de configuration SharePoint sont stockés la liste des applications web ainsi que les sites qu'elles contiennent ?
    • Modifié FLAMENT X mardi 24 janvier 2012 08:37
    vendredi 20 janvier 2012 13:51
  • Bonjour, en parallèle je cherche toujours du coté des services web j'ai trouvé ce tuto très bien expliqué:

    http://msdn.microsoft.com/fr-fr/library/ms464040.aspx

     

    Arrivé a l'étape où je doit créer les fichier .disco et .wsdl à partir de mon fichier .asmx par le biais de l'utilitaire Disco.exe, j'obtiens cette erreur:

    "Le document HTML ne contient pas d'informations de découverte de service Web"

     

    Savez vous de quoi peut venir cette erreur ?

     

    Cordialement,





    • Modifié FLAMENT X mercredi 25 janvier 2012 09:31
    mercredi 25 janvier 2012 09:27
  • Je vous invite tout de même à fouiller plutôt côté WCF pour réaliser votre webservice.

    Comme je vous l'avais indiqué ,  j'ai ecris un petit tuto de départ : http://www.paslatek.net/deacuteployer-un-service-wcf-custom-sur-sharepoint-2010-20110116-44.aspx

    Bon courage !

    mercredi 25 janvier 2012 09:44
  • Bonjour merci pour le lien après quelque essais j'ai réussi à créer un service web custom.

    Cependant il parait assez difficile à mettre en place à cause de la politique sécurité de mon entreprise.

    On me conseil de m'orienter vers des interrogations de la base sql pour lire les infos dont j'ai besoin

    mercredi 25 janvier 2012 13:37