10
votes

Adresse distante IPv4 dans WCF

liée à Comment obtenir la propriété intellectuelle Adresse d'un point d'extrémité distante WCF?

J'utilise ce code pour récupérer l'adresse IP distante lorsqu'une méthode de flux de travail est appelée: xxx

Cependant, la Adresse que je récupère est ":: 1". Je ne veux pas l'adresse IPv6, je souhaite le IPv4 un (127.0.0.1) - Toute façon de le forcer?


0 commentaires

5 Réponses :


6
votes

Non, je ne le pense pas. Vous venez de lire une propriété définie par le client au moment de l'appel. Votre seule option serait d'instruire le client (via une configuration) d'utiliser IPv4 au lieu d'IPv6 à tout moment (c'est-à-dire désactiver IPv6 tous ensemble).

Je ne suis au courant d'aucun paramètre WCF pour appliquer cela - vous devez creuser dans la pile de réseau et voir s'il y a un moyen de faire utiliser des adresses IPv4 au lieu d'IPv6.


0 commentaires

2
votes

Voici une solution de contournement: (vous pouvez stocker les valeurs dans une hache pour éviter plusieurs opérations DNS) xxx


2 commentaires

Indexof retournera toujours un résultat qui est> = -1, donc le si sélectionnera toujours la branche el / code>


La première déclaration "Si" ne devrait-elle pas savoir: Si (RotachiP.indexof (":")> -1)?



4
votes

Vous voyez :: 1 Parce que vous vous connectez au service en résolvant le nom "localhost" au lieu de le résoudre comme "127.0.0.1". Les versions modernes des fenêtres qui ont la pile IPv6 activée utiliseront d'abord IPv6.

Vous pouvez désactiver la pile IPv6, mais c'est à peu près la même chose que de faire comme un autruche et de coller votre tête dans le sable. IPv6 est là et les gens l'utilisent sur leurs réseaux. Votre application doit donc être préparée à l'appuyer.


0 commentaires

2
votes

La solution de contournement proposée par Murat ne fonctionnera pas. Le MSDN dit - si vous passez l'adresse IP à la méthode GetHostaddresses, cette adresse est renvoyée dans un tableau sans interroger le DNS. Pour le faire fonctionner, vous devrez d'abord interroger le nom de l'hôte, à l'aide de la méthode Gethostenry. Et puis, en utilisant le nom d'hôte, utilisez gethostaddresses. Cependant, même la gethostenry peut avoir la liste des adresses qui vous suffiront.


0 commentaires

0
votes

Vous pouvez utiliser adressefamily.Internetwork == adresse.addressfamily et adressefamily.internetworkv6 comme test au lieu de rechercher ":" ou "". " Dans les cordes adressées.


0 commentaires