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: p> 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? P> P>
5 Réponses :
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). P>
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. P>
Voici une solution de contournement: (vous pouvez stocker les valeurs dans une hache pour éviter plusieurs opérations DNS)
Indexof retournera toujours un résultat qui est> = -1, donc le si code> sélectionnera toujours la branche
el / code>
La première déclaration "Si" ne devrait-elle pas savoir: Si (RotachiP.indexof (":")> -1)?
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. P>
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. P>
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. P>
Vous pouvez utiliser adressefamily.Internetwork == adresse.addressfamily code> et
adressefamily.internetworkv6 code> comme test au lieu de rechercher ":" ou "". " Dans les cordes adressées. P>