web-dev-qa-db-fra.com

Xamarin: connectez-vous au service Web hébergé localement

Je souhaite créer une application Web api pour connecter xamarin à Android.
J'avais beaucoup essayé, mais des erreurs de connexion sont à venir.

Mon code est donné ci-dessous:

public async Task<JsonValue> find(int ID)
    {
     using (HttpClient client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://localhost:49836");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            HttpResponseMessage result = client.GetAsync("api/Product").Result;
           return JsonConvert.DeserializeObject<JsonValue>(await result.Content.ReadAsStringAsync());                
     }       
    }
    }

Je reçois l'erreur comme ci-dessous

System.Net.WebException: Erreur: ConnectFailure (connexion refusée) ---> System.Net.Sockets.SocketException: connexion refusée

Quelqu'un peut-il aider. Toute aide est appréciée.

11
jayeshmon kj

Notez que, si vos services Web sont hébergés par IIS Express, sachez que vous ne pouvez pas vous connecter à IIS Express à partir de périphériques externes car, de manière inhérente, IIS Express ne répond qu'à la demande du machine locale. Ainsi, à partir des émulateurs Android en tant que périphériques externes (virtuels), nous ne pouvons pas envoyer de demandes à IIS Express. La solution consiste à utiliser IIS au lieu de IIS Express.

  1. Utilisez IIS ou configurez IIS Express pour répondre aux demandes externes.
  2. Dans Android Emulator, vous ne pouvez pas utiliser «localhost», car «localhost» est un bouclage et fait référence à un émulateur Android. Au lieu de cela, vous devez vous adresser à votre service Web en utilisant l’adresse IP d’IIS.
  3. Configurez le pare-feu de votre système pour autoriser les demandes http.
25
Ehsan Mirsaeedi

Cette réponse peut venir un peu tard, mais pour ceux qui en ont besoin: Si vous utilisez un émulateur Android, demander le service Web localhost ne fonctionnera pas, car vous chercherez l'hôte local de l'émulateur. Comment peux-tu réparer cela? Eh bien, Android Emulator a une adresse magique http://10.0.2.2:your_port qui pointe vers 127.0.0.1:your_port sur votre ordinateur hôte. Jetez un oeil ici . Comme il pointe vers une adresse IP et non sur un hôte local, vous devez accéder à la solution de votre projet, dans .vs folder-> config-> applicationhost.config et modifier ce <binding protocol="http" bindingInformation="*:13142:localhost" />into <binding protocol="http" bindingInformation="*:13142:127.0.0.1" />, où 13142 est mon port, le vôtre peut être différent. Redémarrez IIS Express et vous êtes prêt à partir.

15
Culy Ch

J'ai résolu le problème de la façon de télécharger des données du serveur via asp.net web api et, pour commencer, je le recommande simplement.

Essayez d'utiliser l'adresse complète, par exemple. 

Vérifiez que la connexion de données est activée.

Assurez-vous que vous avez le bon chemin (par exemple, lorsque vous activez le wifi, qui passe par le serveur sur lequel vous WebAPI, donc pas l'adresse complète, mais l'adresse d'un serveur local).

Voici un code simple qui fonctionne dans mon cas (commencez par simple, puis passez ensuite)

  using (WebClient webClient = new WebClient())
            {
                webClient.Encoding = System.Text.Encoding.UTF8;
                string result = webClient.DownloadString(new Uri("https://webapi.domain.cz/api/root"));              
            }
2
Majkl

j'ai résolu ce problème en utilisant l'adresse IP pas utiliser localhost

1
hosam hemaily

Essayez de modifier votre fichier Hosts en ajoutant un nouveau nom d’hôte à 127.0.0.1.

127.0.0.1  mylocalmachine #this name can be any you want

Maintenant, vous pouvez demander avec cette URL

client.BaseAddress = new Uri("http://mylocalmachine:49836"); 

Cela se produit parce que localhost est dans le contexte de votre émulateur, appelez donc localhost du téléphone.

Au lieu d'utiliser hostname, vous pouvez faire ce que Culy Ch vise.

0

Si votre service Web est hébergé par IIS, vous devrez procéder à une configuration supplémentaire pour pouvoir accepter les demandes provenant de périphériques ou de serveurs externes. (simulateur iOS, projet séparé sur une autre machine de développement, etc.)

Pour ce faire, suivez les suggestions de cette réponse au débordement de pile: Comment activer la requête externe dans IIS Express?

0
A. Gent