Comment utiliser les canaux nommés via le réseau?
Je suis en train de créer une connexion à un réseau via des canaux nommés. Je suis en train de faire comme il est dit dans msdn. Je créer des pipes côté serveur avec la fonction.
CreateNamedPipe(
"\\\\.\\pipe\\myNamedPipe",
DUPLEX | FILE_FLAG_OVERLAPPED,
0,
255,
BUFFER_SIZE,
BUFFER_SIZE,
0,
IntPtr.Zero);
et essayez de vous connecter via CreateFile() la fonction
CreateFile(
"\\\.0.0.29\\pipe\\myNamedPipe",
GENERIC_READ | GENERIC_WRITE,
0,
IntPtr.Zero,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
IntPtr.Zero);
10.0.0.29 est machines serveur ip. Si j'essaie de l'exécuter côté client du programme sur la machine serveur avec un nom de pipe "\\.\pipe\myNamedPipe" ou "\\10.0.0.29\pipe\myNamedPipe" (10.0.0.29 est serveurs ip) ou "\\localhost\pipe\myNamedPipe" il fonctionne très bien.
Alors, comment utiliser des canaux nommés via le réseau?
Quelle erreur obtenez-vous lorsque vous essayez d'exécuter le client à distance? Votre problème est presque certainement que le client distant ne peut pas satisfaire aux exigences de sécurité: c'est peut-être le défaut de contrôle d'accès sur le tuyau lui-même, ou quelque chose dans la pile réseau (par exemple, pare-feu).
Code d'erreur est de 4, ce qui signifie Le système ne peut pas ouvrir le fichier.
Avec le réseau, je pense que tout est ok (pare-feu est désactivé), comment puis-je voir les tuyaux de contrôle d'accès par défaut?
Code d'erreur est de 4, ce qui signifie Le système ne peut pas ouvrir le fichier.
Avec le réseau, je pense que tout est ok (pare-feu est désactivé), comment puis-je voir les tuyaux de contrôle d'accès par défaut?
OriginalL'auteur Samvel Hovsepyan | 2011-05-25
Vous devez vous connecter pour publier un commentaire.
À partir de la version 3.5, les tubes nommés sont pris en charge nativement dans le .NET Framework, vous n'avez pas à utiliser fastidieux interop p/invoke code. Voir cette introduction de l'article ici: .NET 3.5 Ajoute le Support des Pipes Nommés pour un échantillon.
À l'aide de cette surcharge du constructeur, NamedPipeClientStream Constructeur (String, String), vous pouvez passer d'un serveur de nom de l'argument.
Bien. Je ne suis pas celui qui a marqué ceci comme la réponse 🙂 Car il est beaucoup plus simple et prend soin de p/invoke questions, j'ai vraiment pense que c'est une réponse à la question "comment utiliser les canaux nommés via le réseau". Concernant le "nativement" à terme, c'est défendable. Il y a une différence dans la "prise en charge" (presque tout est pris en charge .NET avec p/invoke) et "il est il disponible dans l'API". Comment voulez-vous dire?
OK, je n'ai pas vraiment en désaccord avec vous... c'était juste que la question et d'autres observations semblent indiquer que le problème était que l'exécution localement travaillé mais l'exécution à distance a échoué, et il n'est pas clair que la cause de ce qui a été résolu... @Samvel Hovepyan: avez-vous eu de travail à distance maintenant?
Je l'ai essayer. Il n'a pas travaillé à nouveau (((
ok, donc c'est probablement un problème d'infrastructure. Vérifier le pare-feu comme l'a dit Chris. Note: erreur windows 4 est ERROR_TOO_MANY_OPEN_FILES.
OriginalL'auteur Simon Mourier
Je pense que la réponse à la question ci-dessus, mais gardez à l'esprit qu'il y a un gros problème à l'aide des canaux qui sont ouverts à une machine distante. Lorsque vous appelez la fonction windows API WaitNamedPipe avec un délai d'attente supérieur à 0, le thread d'utiliser un ensemble de CPU jusqu'à ce que le canal nommé connecte ou heures. Avec un délai d'attente de 0, il n'a pas assez de temps pour faire une connexion à distance, de sorte que vous êtes obligé d'utiliser tout d'un PROCESSEUR à chaque fois que vous essayez de vous connecter, et tout ce que vous pouvez faire est de temps, et essayer de nouveau plus tard.
J'ai rencontré ce problème et trouvé que je n'étais pas le seul: http://social.msdn.microsoft.com/Forums/sv-SE/netfxnetcom/thread/7bbf5a0b-3c22-4836-b271-999e514c321b
Jusqu'à ce que Microsoft offre plus de performances de manière conviviale de la connexion à distance des canaux nommés, je vais arrêter de l'utiliser entièrement, et je vous suggère de faire de même. Si pour une raison quelconque vous êtes incapable de se connecter presque immédiatement, vous vous retrouvez avec une absence de cycle non productif.
C'est un bug - selon un commentaire ici il peut être fixé dans Windows 10.
OriginalL'auteur fcrick
Pipe Serveur doit avoir un nom, vous devez spécifier un nom pour le serveur et pas l'adresse IP.
Voir ce tutoriel.
Cependant les tubes nommés sont pratiques pour les connexions locales, parce que sur le Réseau, vous obtenez les frais généraux de l'encapsulation TCP décisions à l'aide des canaux nommés gênant.
À l'aide de canaux nommés pour une connexion locale pour améliorer la vitesse, mais sur le réseau n'a pas beaucoup de sens ... sur Socket ...
Configuration du pare-feu sur le serveur?
OriginalL'auteur aleroot