web-dev-qa-db-de.com

Xamarin: Verbindung zum lokal gehosteten Webdienst

Ich möchte eine Web-API-Anwendung erstellen, um Xamarin mit Android zu verbinden.
Ich hatte viel versucht, aber einige Verbindungsfehler kommen.

Mein Code ist unten angegeben:

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());                
     }       
    }
    }

Ich bekomme die Fehlermeldung wie unten

System.Net.WebException: Fehler: ConnectFailure (Verbindung abgelehnt) ---> System.Net.Sockets.SocketException: Verbindung abgelehnt

Kann jemand helfen. Jede Hilfe wird geschätzt.

11
jayeshmon kj

Wenn Ihre Webdienste von IIS Express gehostet werden, sollten Sie wissen, dass Sie keine Verbindung zu IIS Express von externen Geräten herstellen können, da IIS Express inhärent nur auf die Anforderung von reagiert lokale Maschine. Daher können von Android-Emulatoren als externen (virtuellen) Geräten keine Anforderungen an IIS Express gesendet werden. Die Lösung ist die Verwendung von IIS anstelle von IIS Express.

  1. Verwenden Sie IIS oder konfigurieren Sie IIS Express, um externe Anfragen zu bearbeiten.
  2. Im Android-Emulator können Sie 'localhost' nicht verwenden, da 'localhost' Loopback ist und auf den Android-Emulator verweist. Stattdessen müssen Sie Ihren Webdienst über die IP von IIS ansprechen.
  3. Konfigurieren Sie die Firewall Ihres Systems, damit HTTP-Anfragen eingehen können.
25
Ehsan Mirsaeedi

Diese Antwort kann etwas zu spät kommen, aber für diejenigen, die sie benötigen: Wenn Sie einen Android-Emulator verwenden, funktioniert die Abfrage nach dem localhost-Webdienst nicht, da Sie sich den localhost des Betriebssystems ansehen Emulator. Wie können Sie das beheben? Nun, Android Emulator hat eine magische Adresse http://10.0.2.2:your_port , die auf 127.0.0.1:your_port auf Ihrem Host-Rechner verweist. Schauen Sie here . Da es auf eine IP und nicht auf localhost verweist, müssen Sie in .vs Ordner-> config-> applicationhost.config in Ihre Projektlösung gehen und diese <binding protocol="http" bindingInformation="*:13142:localhost" />into <binding protocol="http" bindingInformation="*:13142:127.0.0.1" /> ändern, wobei 13142 mein Port ist. Ihr Port kann anders sein. Starten Sie IIS Express neu und Sie können fortfahren.

15
Culy Ch

Ich habe das Problem gelöst, wie man Daten vom Server über asp.net web api herunterlädt, und für den Start empfehle ich den einfachen Weg.

Versuchen Sie, die vollständige Adresse zu verwenden, z. 

Stellen Sie sicher, dass die Datenverbindung aktiviert ist.

Stellen Sie sicher, dass Sie den richtigen Pfad haben (z. B. wenn Sie WLAN einschalten, das über den Server, auf dem Sie die WebAPI laufen, also nicht die vollständige Adresse, sondern die Adresse eines lokalen Servers).

Hier ist ein einfacher Code, der in meinem Fall läuft (von Simple aus und dann weiter)

  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

ich habe dieses Problem gelöst, indem ich die IP-Adresse nicht mit localhost verwende

1
hosam hemaily

Ändern Sie Ihre Hosts-Datei und fügen Sie einen neuen Hostnamen in 127.0.0.1 hinzu

127.0.0.1  mylocalmachine #this name can be any you want

Jetzt können Sie mit dieser URL anfordern

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

Dies geschieht, weil localhost sich im Kontext Ihres Emulators befindet, also localhost des Telefons anruft.

Anstelle des Hostnamens können Sie die Ziele von Culy Ch erfüllen.

Wenn Ihr Web Service von IIS gehostet wird, müssen Sie einige zusätzliche Einstellungen vornehmen, um Anforderungen von externen Geräten oder Servern annehmen zu können. (iOS-Simulator, separates Projekt auf einem anderen Entwickler-Computer usw.)

Befolgen Sie dazu die Vorschläge in dieser Stack Overflow-Antwort: Wie kann eine externe Anforderung in IIS Express aktiviert werden?

0
A. Gent