2016-05-11 1 views
0

J'ai écrit un code C# pour synchroniser certains cubes Analysis Services. L'une des phases de cette synchronisation consiste à copier un dossier d'un serveur AS vers un autre.
L'exigence est que la synchronisation peut être exécutée à partir d'un troisième hôte, nous avons donc un double saut.C# WMI Multi hop

Pour copier le dossier je me connecte à partir d'un hôte A à la source AS, sur le serveur B, en utilisant le protocole WMI, puis je lance à distance, sur le serveur B, robocopy pour copier le dossier à partir de la source B vers le serveur de destination C.
Le problème est que lorsque le robocopy est effectué, la connexion n'a pas les informations d'identification d'origine et n'a pas le droit d'écrire sur le serveur de destination. Je pense que l'utilisateur ANONYMOUS LOGON est utilisé pour effectuer l'action, donc, juste à des fins de test, je lui ai assigné les droits d'écriture sur le partage C, mais aussi de cette manière, robocopy échoue avec ERROR 5 (0x00000005) Accès au répertoire de destination.

Net diagram

Il est un moyen d'effectuer ce double saut ou je dois laisser l'idée d'utiliser l'hôte A?

+0

Ce n'est pas vraiment une question de programmation. Peut-être mieux pour http://superuser.com/. Le seul élément C# est le code mystérieux * C# que j'écris * – Liam

Répondre

1

@Liam est correct. Ce n'est que partiellement un problème de programmation. Le problème majeur est que votre 2ème saut (la connexion de B à C de A) nécessite delegation pour être activé dans AD. Une fois que vous avez obtenu votre delegation settings correct, alors il devient un problème de programmation, car vous devez spécifier un nom d'utilisateur et un mot de passe dans votre appel SWbemLocater.ConnectServer, mais c'est la partie vraiment facile.


PS - Comme une pensée après ... si vous configurez le robocopy comme une tâche planifiée, puis exécuté la tâche planifiée à distance de A? Je pense que cela pourrait être un travail autour puisque la tâche planifiée serait en cours d'exécution avec l'autorité qui est définie dans la tâche, donc techniquement, il n'y a pas de second saut.


PPS - Je peux vérifier que cela fonctionnera. Créer une tâche planifiée sur B qui copie à C. Assurez-vous d'utiliser les informations d'identification qui ont des droits sur les deux machines. Ensuite, à partir de A, vous pouvez exécuter la tâche planifiée sur B, qui copiera vos données en C. Cela évite le problème de délégation.