Votre question

C# connexion à sharepoint avec un compte utilisateur

Tags :
  • Connexion
  • Programmation
Dernière réponse : dans Programmation
7 Juin 2011 19:39:38

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?

Autres pages sur : connexion sharepoint compte utilisateur

a c 232 L Programmation
7 Juin 2011 20:31:15

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");
m
0
l
13 Juin 2011 18:26:07

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.

m
0
l
Contenus similaires
a c 232 L Programmation
14 Juin 2011 01:41:51

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.
m
0
l
14 Juin 2011 10:09:31

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.
m
0
l
a c 232 L Programmation
14 Juin 2011 11:37:50

A quel moment tu as une fenêtre d'authentification SP qui apparait ?
Fais voir tout ton code...
m
0
l
14 Juin 2011 13:04:33

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.
m
0
l
a c 232 L Programmation
14 Juin 2011 16:12:42

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à
m
0
l
14 Juin 2011 19:19:05

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.
m
0
l
a c 232 L Programmation
15 Juin 2011 11:41:00

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. }
m
0
l
15 Juin 2011 12:40:46

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.
m
0
l
a c 232 L Programmation
15 Juin 2011 14:31:02

Salut,

Je n'ai jamais essayé de récupérer des images depuis un site SharePoint.
Tu as la liste de tous les Web Services ici : http://msdn.microsoft.com/en-us/library/ms479390%28offi...
Mais il ne me semble pas qu'il y en ait un pour ce que tu veux faire.

Essaie de voir si tu peux pas faire une WebRequest pour récupérer l'image plutôt, vu que tu peux passer des Credentials.
m
0
l
17 Juin 2011 09:40:36

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.
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS