Distance IPv4 adresse dans WCF
Liées à Comment obtenir l'adresse IP d'un WCF point de terminaison distant?
Je suis en utilisant ce code pour récupérer l'adresse IP distante lorsqu'un flux de travail méthode est invoquée:
private static string GetRemoteIP()
{
var oc = OperationContext.Current;
var mp = oc.IncomingMessageProperties;
var remp = mp[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
return remp == null ? "(unknown)" : remp.Address;
}
Cependant, l'adresse je serai de retour est "::1". Je ne veux pas l'adresse IPv6, je veux de l'IPv4 à un (127.0.0.1) - un moyen de le forcer?
OriginalL'auteur Marcel Popescu | 2010-01-08
Vous devez vous connecter pour publier un commentaire.
Non, je ne le pense pas. En gros, vous avez juste à lire une propriété définie par le client au moment de l'appel. Votre seule option serait de demander au client (par le biais de certaines config) pour utiliser IPv4 à la place de l'IPv6 à tous les temps (c'est à dire désactiver IPv6 tous ensemble).
Je ne suis pas au courant de tout WCF paramètre pour appliquer ce - que vous avez à creuser dans la pile réseau et voir si il y a moyen de rendre l'utilisation des adresses IPv4 au lieu de l'IPv6.
OriginalL'auteur marc_s
Vous voyez ::1 parce que vous êtes à la connexion au service en résolvant le nom "localhost" au lieu de l'aborder comme "127.0.0.1". Les versions modernes de Windows qui ont la pile IPv6 est activée, l'utilisation de l'IPv6 en premier.
Vous pouvez désactiver la pile IPv6, mais c'est à peu près la même chose que de faire l'autruche et de coller votre tête dans le sable. IPv6 est ici, et les gens l'utilisent sur leurs réseaux, de sorte que votre application doivent être prêts à le soutenir.
OriginalL'auteur Warren Rumak
La solution proposée par Murat ne fonctionnera pas.
La MSDN, dit - si vous transmettez l'adresse IP de la GetHostAddresses méthode cette adresse est renvoyée dans un tableau sans interroger le DNS.
Pour le faire fonctionner, vous aurez besoin de rechercher le nom d'hôte d'abord, à l'aide de GetHostEntry méthode. Et puis, en utilisant le nom d'hôte, l'utilisation GetHostAddresses. Cependant, même les GetHostEntry peut avoir la liste des adresses que ce sera suffisant pour vous.
OriginalL'auteur Denis Mazourick
Voici une solution de contournement: (Vous pouvez stocker les valeurs dans une table de hachage pour éviter de multiples opérations de DNS)
if
toujours leselse
brancheNe devrait pas le premier "si" déclaration de lire: si(remoteIP.IndexOf(":") > -1)?
OriginalL'auteur Murat Eraydin
Vous pouvez utiliser
AddressFamily.InterNetwork == address.AddressFamily
etAddressFamily.InterNetworkV6
comme un test au lieu de chercher ":" ou "." dans les adresses des chaînes.OriginalL'auteur yowaiOtoko