Connessione a Web Server

di il
28 risposte

Connessione a Web Server

Salve,

quando lancio un Client Http da App Xamarin Android in connessione ad un Web Server Restful in localhost, ottengo in risposta questo errore:

'System.AggregateException: Failed to connect to localhost/127.0.0.1:44354'.

Preciso che lo stesso Client Http si connette regolarmente allo stesso Web Server se viene lanciato da un Web Form ASP.NET.

C'è qualche problema di configurazione in Android?

28 Risposte

  • Re: Connessione a Web Server

    Ciao, il problema è che 127.0.0.1 si riferisce all'emulatore/dispositivo su cui gira l'applicazione, mentre presumibilmente il web server girerà su un'altra macchina. Se sei su un emulatore android e vuoi connetterti alla macchina che fa da host dell'emulatore allora puoi usare l'indirizzo 10.0.2.2, altrimenti dovrai usare il vero indirizzo IP della macchina su cui si trova il server (occhio che potrebbe fregarti il fatto di avere dispositivo android e server nella stessa sottorete se questa non dovesse essere la configurazione che userai in produzione)
  • Re: Connessione a Web Server

    La App la eseguo tramite dispositivo fisico Android;

    ho messo sulla stessa rete sia il dispositivo Android che la macchina Server dove risiede il Web Server, impostando sul client http (dispositivo fisico) l'IP della macchina Server;

    ora ottengo un altro tipo di errore:

    System.AggregateException:
    'One or more errors occurred.
    (java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.)'
  • Re: Connessione a Web Server

    Quell'errore significa che il certificato del server è invalido o mal configurato. Stai usando una connessione https per connetterti al server?
  • Re: Connessione a Web Server

    Quando lancio l'API del Web Server (Server in localhost) mi configura https sulla URL
  • Re: Connessione a Web Server

    Quale può essere il problema sulla rete locale per cui si verifica questa Exception sul certificato Server?
  • Re: Connessione a Web Server

    Il certificato che usi è stato emesso da una CA riconosciuta o è autoprodotto? Il certificato è stato emesso per il dominio/IP del server? Se anche una sola di queste cose non fosse soddisfatta, il client restituirebbe un errore (a meno che non si decida via codice di accettare un particolare certificato anche se invalido)
  • Re: Connessione a Web Server

    Come si può accettare un particolare certificato anche se invalido, dal codice della App?
  • Re: Connessione a Web Server

    Eccoti un esempio: https://stackoverflow.com/q/2642777/234061

    Come sottolineato nella risposta, questo workaround non dovrebbe mai essere promosso ad ambienti di produzione perché apre le porte ad attacchi informatici (es: MITM)
  • Re: Connessione a Web Server

    Ho impostato ora sul Web Server Restful il protocollo http (senza certificato) su rete locale;

    quando connetto la App attraverso il Client http all'indirizzo del Server "http://192.168.1.6:5442" mi sa questo errore:

    SystemAggregateException: 'Cleartext HTTP traffic to 192.168.1.6 non permitted'

    Eppure il ping tra il dispositivo Android (fisico) che ha indirizzo 192.168.1.10 e il Server 192.168.1.6 da esito positivo.
  • Re: Connessione a Web Server

    Non ne ero a conoscenza ma pare che a partire dalla versione 9 in poi Android abbia disabilitato di default la possibilità di connettersi a server non sicuri. Per disabilitare questa opzione devi creare un file di configurazione come descritto qua. In particolare puoi impostare la configurazione utilizzata di default delle versioni precedenti (copiata dal link precedente):
    
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
    
  • Re: Connessione a Web Server

    Come va inserito in manifest:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/androi" android:versionCode="1" android:versionName="1.0" package="com.companyname.click_android" android:installLocation="preferExternal">

    <base-config cleartextTrafficPermitted="true">
    <trust-anchors>
    <certificates src="system" />
    </trust-anchors>
    </base-config>

    …………
    ………..
  • Re: Connessione a Web Server

    È spiegato nel link postato sopra:
    C'è un esempio nella prima sezione "adding a network security configuration file"
  • Re: Connessione a Web Server

    Per configurare la sicurezza di rete sul mio AndroiManifest.xml non trovo:

    <application android:networkSecurityConfig="@xml/network_security_config"

    Va aggiunto?
  • Re: Connessione a Web Server

    Si, va aggiunto. Altrimenti usa la configurazione di default, che prevede l'utilizzo di HTTPS (o equivalente per altri protocolli) per tutte le chiamate.

    Ovviamente dovrai anche creare una risorsa XML chiamata network_security_config.xml con la configurazione postata qualche messaggio fa. Se il file XML dovesse avere un nome diverso dovresti aggiornare il riferimento nel manifest di conseguenza
Devi accedere o registrarti per scrivere nel forum
28 risposte