Se connecter avec
S'enregistrer | Connectez-vous

C# connexion à sharepoint avec un compte utilisateur

Dernière réponse : dans Programmation

Bonojur,
Après une recherche de 2 jours sur le net je me dirige vers vous espérant trouver une solution à mon problème.
en fait je veux établir une connexion à SP en utilisant un compte utilisateur(en mode anonyme j'ai pas de souci)
J'ai importé des références web d'authentification et de listes pour avoir le code suivant:
Citation :
SPConnect.Authentication authSP = new SPConnect.Authentication();
SPLists.Lists spLists = new SPLists.Lists();
authSP.CookieContainer = new System.Net.CookieContainer();
authSP.AllowAutoRedirect = true;
SPConnect.LoginResult loginSP = authSP.Login("administrateur", "pass");
if (loginSP.ErrorCode == SPConnect.LoginErrorCode.NoError)
{
// Now we can talk to the Lists Web service.
spLists.CookieContainer = authSP.CookieContainer;
//object list = spLists.GetList("presentationAccueil");
SPSite oSiteCollection = SPContext.Current.Site;
SPList listeee = oSiteCollection.AllWebs["http://vmspprod:25401"].Lists["presentationAccueil"];
}

en arrivant à la ligne: SPConnect.LoginResult loginSP = authSP.Login("administrateur", "pass") j'obtiens l'erreur NotInFormsAuthenticationMode.

y aurait-il un moyen de faire ce que je voulais?
Lassé par la pub ? Créez un compte
Expert Programmation

Salut,

Il y a plusieurs choses là...
Tu utilises les Web Services d'un côté, mais aussi le modèle Objet d'un autre côté...

Tu veux faire une page/webpart qui va être lancée directement dans SharePoint ? Ou est-ce que tu veux faire ça dans une application à part indépendante ?
Pour une page/webpart, tu peux utiliser le Modèle Objet, sinon si c'est pas directement dans SharePoint tu ne peux utiliser que les Web Services.


Après, par rapport à ton erreur, le Web Services Authentication.asmx n'est à utiliser que quand ton serveur SharePoint est en mode d'authentification Forms.
Vu l'erreur que tu as, ton serveur est en mode d'authentification Windows.

Si tu veux utiliser les Web Services SharePoint avec le mode Windows, tu n'as pas besoin de te connecter, tu as seulement besoin de passer les Credentials au Web Services.
  1. SPLists.lists spLists = new SPLists.Lists();
  2. spLists.Url = "http://vmspprod:25401/_vti_bin/Lists.asmx";
  3. spLists.Credentials = new System.Net.NetworkCredentials("administrateur", "pass");
  4. XmlNode list = spLists.GetList("presentationAccueil");

Bonjour,
Merci beaucoup de ta réponse.
effectivement, je veux faire la connexion dans une application à part.
Le script que tu m'as filé fonctionne bien après une adaptation, mais j'ai encore un problème.
Citation :

SPLists.Lists spLists = new SPLists.Lists();
spLists.Url = "http://adresse/_vti_bin/Lists.asmx";
spLists.Credentials = new System.Net.NetworkCredential("administrateur", "passe","");
XmlNode list = spLists.GetListItems("presentationAccueil",null,null,null,null,null,null);
// XmlNode list = spLists.GetList("presentationAccueil");
string aa = list.ChildNodes[1].ChildNodes[1].Attributes["ows_Title"].Value;
for (int i = 0; i < list.ChildNodes[1].ChildNodes.Count; i++)
{
if (list.ChildNodes[1].ChildNodes.Attributes != null)
{
urlIntranet = WebConfigurationManager.AppSettings["urlIntranet"];
string intro = list.ChildNodes[1].ChildNodes[1].Attributes["ows_intro"].Value.ToString().Replace("src=\"/", "src=\"" + urlIntranet);
paramsRcu = new ParamRecu(list.ChildNodes[1].ChildNodes[1].Attributes["ows_ID"].Value,
list.ChildNodes[1].ChildNodes[1].Attributes["ows_Created"].Value.Substring(0, 10),
list.ChildNodes[1].ChildNodes[1].Attributes["ows_Title"].Value,
intro,
"",
"",
""
);
listToJson.Add(paramsRcu);

break;

}
}
Response.Write("{\"totalCount\":\"" + nb + "\", \"results\":" + JsonConvert.SerializeObject(listToJson) + "}");

Quand je passe l'identifiant et le mot de passe, j'ai une fenêtre d'authentification sharepoint qui s'affiche. ceci me pose problème car je ne veux pas avoir cette fenetre. et est ce que c'est possible de ne pas passer par xml node, genre
Citation :
liste.getElement
?

Citation :
objQuery.Query = "<Where>"
+ "<And><Eq><FieldRef Name=\"Publi_x00e9_\" /><Value Type=\"Choice\">Oui</Value></Eq>"
+ "<And><Leq><FieldRef Name=\"Date_x0020_de_x0020_d_x00e9_but\" /><Value IncludeTimeValue=\"TRUE\" Type=\"DateTime\"><Today /></Value></Leq>"
+ "<Geq><FieldRef Name=\"Date_x0020_de_x0020_fin\" /><Value IncludeTimeValue=\"TRUE\" Type=\"DateTime\"><Today /></Value>"
+ "</Geq>"
+ "</And>"
+ "</And>"
+ "</Where>";

objElements = list.GetItems(objQuery);

Merci encore de ta réponse et j'attends vivement ta réponse :) 

Amicalement,
khaled.

Expert Programmation

Tu as une fenêtre d'authentification sharepoint ??


Et tu peux faire un:
  1. var nsmgr = new XmlNamespaceManager(new NameTable());
  2. nsmgr.AddNamespace("rs", "urn:schemas-microsoft-com:rowset");
  3. nsmgr.AddNamespace("dt", "uuid:C2F41010-65B3-11d1-A29F-00AA00C14882");
  4. XmlNodeList rows = list.SelectNodes("rs:data/z:row", nsmgr);



Edit: et si tu veux passer une query, c'est un des paramètres de GetListItems, je sais plus lequel, le 4 ou 5ème de mémoire.

Bonjour,
Merci beaucoup de ta réponse.
Oui j'ai une fenêtre d'authentification sharepoint qui apparait.
Cela ne devrait pas arriver normalement car je me connecte à sharepoint depuis une application externe pour récupérer des listes et des images...
Y a t-il une moyen d’empêcher l'apparition de cette fenêtre.

Merci encore.
@+

Cordialement,
Khaled.

salut,
voici le code que j'utilise:
Citation :

try
{
//connexion à la BDD metadico
ConnectBDD cc = new ConnectBDD();
ConnectBDD.oSQLConn.Open();

DataSet ds = new DataSet();

//Paramétres d'affichage des actualités projets
string query = "SELECT valeurParametre FROM Parametre WHERE idParametre ='1';";

Data = new SqlDataAdapter(query, ConnectBDD.oSQLConn);
Data.Fill(ds, "wws_customers");

loRow = ds.Tables["wws_customers"].Rows[0];
int id_cat = Convert.ToInt32(loRow["valeurParametre"]);

loRow = ds.Tables["wws_customers"].Rows[0];
int nb = Convert.ToInt32(loRow["valeurParametre"]);
int nbArticleAffiche = 0;
SPLists.Lists spLists = new SPLists.Lists();
spLists.Url = "http://vmspprod:25401/_vti_bin/Lists.asmx";
spLists.Credentials = new System.Net.NetworkCredential("administrateur", "pass","");
XmlNode list = spLists.GetListItems("presentationAccueil",null,null,null,null,null,null);
string aa = list.ChildNodes[1].ChildNodes[1].Attributes["ows_Title"].Value;
for (int i = 0; i < list.ChildNodes[1].ChildNodes.Count; i++)
{
if (list.ChildNodes[1].ChildNodes.Attributes != null)
{
urlIntranet = WebConfigurationManager.AppSettings["urlIntranet"];
string intro = list.ChildNodes[1].ChildNodes[1].Attributes["ows_intro"].Value.ToString().Replace("src=\"/", "src=\"" + urlIntranet);
paramsRcu = new ParamRecu(list.ChildNodes[1].ChildNodes[1].Attributes["ows_ID"].Value,
list.ChildNodes[1].ChildNodes[1].Attributes["ows_Created"].Value.Substring(0, 10),
list.ChildNodes[1].ChildNodes[1].Attributes["ows_Title"].Value,
intro,
"",
"",
""
);
listToJson.Add(paramsRcu);
nbArticleAffiche++;
break;
}
}
Response.Write("{\"totalCount\":\"" + nbArticleAffiche + "\", \"results\":" + JsonConvert.SerializeObject(listToJson) + "}");

}

catch(Exception )
{
Response.Write("[" + "{\"text\":\"Une erreur s'est produite!\", \"leaf\": true, \"iconCls\": \"\"}" + "]");
}


la fenêtre s'affiche après le chargement des appels des fonctions c# en ext-js.

Merci de ta réponse rapide
@+

Amicalement,
Khaled.
Expert Programmation

Je n'ai jamais utilisé ext-js
Mais je n'ai jamais eu de problème pour faire des requêtes Web Services sur un site SharePoint (c'est mon boulot, j'en fais toute la journée :-P), sans jamais avoir de fenêtre d'authentification qui s'ouvre...
Je ne sais pas trop quoi te dire de plus là

Je te remercie de ta réponse.
Je pense pas que le problème vient de Ext-js, je récupère une task seulement.
Cette fenêtre s'affiche une fois que le serveur a exécuté et retourné les résultats de toutes les requêtes.
Peux tu posté un exemple qui tourne correctement chez toi?
Concernant sharepoint, je suis en mode authentification windows et je n'ai pas celui des formulaires.
Je vais essayer de réimporter les références Web!

Merci encore.
Bonne soirée.
Expert Programmation

Voilà un exemple :

  1. var lists = new Lists
  2. {
  3. Url = "http://sps/sites/toto/_vti_bin/Lists.asmx",
  4. Credentials = CredentialCache.DefaultCredentials,
  5. PreAuthenticate = true,
  6. };
  7.  
  8. try
  9. {
  10. XmlNode listCollection = lists.GetListCollection();
  11. Console.WriteLine("Lists successfully retrieved");
  12. }
  13. catch (Exception ex)
  14. {
  15. Console.WriteLine("Error while retrieving lists: " + ex.Message);
  16. Console.ReadLine();
  17. return;
  18. }

Bonjour,
J'ai trouvé d'où ça vient le problème.
quand je récupère un article depuis une liste je recupère des images aussi, et dans mon code je rajoute à la balise image l'adresse de mon site sharepoint.
Citation :
urlIntranet = WebConfigurationManager.AppSettings["urlIntranet"];//=http://vmspprod:25401/
string intro = list.ChildNodes[1].ChildNodes[1].Attributes["ows_intro"].Value.ToString().Replace("src=\"/", "src=\"" + urlIntranet);

Dans l'onglet Réseau de mon firebug, j'ai l'erreur suivante 401 Unauthorized pour récupérer cette image à l'adresse http://vmspprod:25401/Images/logo.jpg

Donc c'est quand j'utilise l'urlIntranet que la fenêtre s'affiche.

Est ce qu'il y a un moyen de garder mes identifiants? ou existe-il un webService pour les images?

Merci pour ton aide.

Bonne journée.

Amicalement,
Khaled.

Bonjour,
Merci pour toutes tes réponses.
pour les images j'ai autorisé l'accès anonyme sur ce dossier.(en attendant de trouver la vraie solution)
J'aurais besoin d'afficher des documents pdf dans mon appli, je vais creuser la piste du webRequest ou webClient.
Merci encore de tes réponses.

bon journée.

Amicalement,
Khaled.
Lassé par la pub ? Créez un compte
Tom's guide dans le monde