2010-08-16 5 views
0

J'ai une application Silverlight, qui télécharge des fichiers sur un site Sharepoint. Je l'ai fait travailler pour un site Sharepoint dans ma boîte et dans un site Sharepoint dans la boîte de quelqu'un d'autre, où je me connecte en utilisant mon compte Windows sur ce site. Mais je ne suis pas en mesure de télécharger des fichiers dans des sites Sharepoint qui sont dans un domaine différent/utiliser un identifiant différent.Téléchargement de fichier Sharepoint

Pour télécharger des fichiers sur des sites qui n'utilisent pas mon compte. J'utiliser pour obtenir les informations d'identification et de modifier les critères d'évaluation

CopySoapClient copy = new CopySoapClient(); 
copy.ClientCredentials.UserName.UserName = obj.UserName; 
copy.ClientCredentials.UserName.Password = obj.Password; 
copy.Endpoint.Address = new System.ServiceModel.EndpointAddress(newMaster.Url + "/_vti_bin/Copy.asmx"); 
copy.Endpoint.Contract.Name = "CopyReference.CopySoap"; 
copy.Endpoint.Binding.Name = "basicHttpBinding"; 
copy.Endpoint.Contract.ConfigurationName = "CopySoap"; 

où obj.UserName a le DomainName trop .. Pour exemple. Domaine \ Nom d'utilisateur.

+0

Quelle est l'erreur que vous obtenez? –

+0

Je n'ai reçu aucune erreur. J'ai essayé de le télécharger. J'ai reçu le résultat de CopyIntoItems comme 0 (pas CopyResult). Mais je ne le vois pas sur le site. J'ai même essayé Explorer View pour trouver le fichier. –

Répondre

4

Voici un extrait de code que je l'ai utilisé dans le passé pour télécharger un document dans une bibliothèque de documents SharePoint à l'aide du SDK de services Web SharePoint.

var copyClient = new Copy(); 
copyClient .Credentials = credentials; // <-- Create Network Credentials 

var siteUrl = "http://...."; 
var libraryName = "MyDocLibrary"; 
var localFilePath = "..."; 
var fileName = Path.GetFileName(localFilePath); 
var destinationUrl = string.Format("{0}/{1}/{2}", siteUrl, libraryName, fileName); 

var fileBytes = File.ReadAllBytes(localFilePath); 
var info = new[]{new FieldInformation 
         { 
          DisplayName = fileName, 
          Id = Guid.NewGuid(), 
          InternalName = fileName, 
          Type = FieldType.File, 
          Value = fileName 
         }}; 

CopyResult[] results; 
copyClient.CopyIntoItems(destinationUrl, new[] { destinationUrl }, info, fileBytes, out results); 

Pour votre information - Cette procuration Copy a été généré en utilisant l'ancienne école Ajouter une référence Web au lieu de la nouvelle Ajouter un service de référence. Je trouve plus facile d'utiliser les anciens mandataires de l'école lorsque je travaille avec les anciens services Web ASMX SharePoint.

et si vous avez besoin de changer dynamiquement l'URL de point final, vous pouvez utiliser ce qui suit avant d'appeler la méthode CopyIntoItems().

var copyServiceUrl = string.Concat(siteUrl, "/_vti_bin/Copy.asmx"); 
copyClient.Url = copyServiceUrl; 
+0

. Merci d'avoir répondu. Je l'utilise dans une application Silverlight. Donc, je vais devoir le faire de manière asynchrone et je vais devoir définir une valeur pour ClientCredentials. Je ne pense pas que je peux le faire de cette façon. Même si je le fais de cette façon en utilisant un WebService, en configurant NetworkCredentials et en le faisant de manière synchrone, je doute qu'il s'exécute sur un site dans une machine différente, car je l'implémente en utilisant un WebService. –

0

Je l'ai eu fonctionnant d'une manière différente réellement. J'ai trouvé que le site n'était pas vraiment authentifié lorsque j'ai utilisé un contrôle WebBrowser pour accéder à l'emplacement de la bibliothèque de documents/dossiers sharepoint dans lequel je voulais télécharger. Depuis que je suis en utilisant Silverlight Je n'ai pas pu utiliser,

copy.ClientCredentials.Windows.ClientCredential.Domain. 

que je aurais pu utiliser dans des applications ASP.Net pour télécharger des fichiers.

J'ai donc invité manuellement l'utilisateur à entrer les informations d'identification dans le contrôle WebBrowser. Maintenant tout fonctionne bien. Le problème était que je n'étais pas en mesure de transmettre les informations d'identification à travers le domaine ou que je ne pouvais pas spécifier le domaine à partir de Silverlight. PS: J'avais des politiques d'accès client et des domaines croisés. Donc ça n'a rien à voir avec ça. (Pour autant que je sache).

Si je pouvais obtenir une solution sans cette solution de contournement. Ce serait très apprécié.

Merci encore de votre intérêt pour Wallace.