2008-12-15 9 views
1

Je suis nouveau sur plumtree et j'essaie d'apprendre à connaître le modèle d'objet Plumtree. J'essaie de télécharger un fichier à partir du répertoire de connaissances de plumtree par programmation.Télécharger par programme un fichier à partir du répertoire de connaissances de plumtree

C'est le code que je utilise:

IRemoteSession session = RemoteSessionFactory.GetExplicitLoginContext (nouveau Uri (URL), userName, mot de passe);

IDocumentFolderManager DocFolderManager = session.GetDocumentFolderManager();

IDocumentManager DocManager = session.GetDocumentManager();

IObjectQuery FolderQuery = DocFolderManager.GetSubFolders (ID de dossier);

IDocumentQuery DocQuery = DocManager.CreateQuery (FolderQuery.GetRow (i) .GetID());

IObjectQuery DocumentQuery = DocQuery.Execute();

IObjectQueryRow document = DocumentQuery.GetRow (1);

IDocumentProperties _docProperties = DocManager.QueryDocumentProperties (document.GetID());

chaîne docUrl = _docProperties.GetStringValue (5);

WebClient webclient = nouveau WebClient();

webclient.Credentials = new System.Net.NetworkCredential (nom_utilisateur, mot de passe, "");

webclient.Credentials = CredentialCache.DefaultCredentials;

webclient.DownloadFile (docUrl, "c: \ 1");

Mais il semble y avoir un problème avec mon code de création de session, car au lieu de télécharger le fichier réel, ce code télécharge la page de connexion Plumtree à mon système de fichiers.

Quelqu'un peut-il me dire ce que je fais ici? Il doit y avoir quelque chose qui me manque

Répondre

1

Le problème est que votre instance de client Web ne sait pas comment s'authentifier auprès du serveur plumtree. new NetowrkCredential() ou CredentialCache.DefaultCredentials fonctionne dans des cas simples, mais clairement pas dans celui-ci. Plumtree utilise un cookie ou (plus probablement) un jeton de connexion particulier qui est obtenu via l'appel à GetExplicitLoginContext(), puis envoyé avec toutes les demandes suivantes dans cette session.

Vous pouvez potentiellement simuler ce "envoyé avec toutes les demandes suivantes" en utilisant WebClient, mais vous auriez besoin de connaître plus de détails techniques sur la manière dont les serveurs Plumtree authentifient les clients. Vous pouvez trouver certaines de ces informations en utilisant Fiddler, mais une approche plus facile peut être de trouver une API que plumtree propose de télécharger des fichiers qui ont été précédemment téléchargés dans Plumtree.

Une autre façon (hacky) d'aborder cela est de simuler un client de navigation.Faites votre demande ci-dessus, puis analysez le code HTML, sortez l'URL de l'action du formulaire de connexion, puis simulez un appel HttpWebRequest qui ressemble à un vrai client en remplissant le formulaire de connexion. Vous devez utiliser un CookieContainer pour vous assurer que les cookies sont envoyés, assurez-vous que les en-têtes sont corrects, etc. Voir http://channel9.msdn.com/forums/TechOff/162017-Using-WebClient-to-enter-Form-based-Auth-system-How/ pour plus d'informations.

Questions connexes