C# webapi

di il
5 risposte

C# webapi

Buonasera a tutti, premetto che questo è il mio primo post in questo forum, mi presento mi chiamo Gerardo.

Vengo al punto.

Il software a cui sto lavorando è un software diciamo di "produzione", è il classico gestionale multi-client con un database Sql Server installato o su un server locale del cliente oppure su uno dei PC client che a quel punto funge da server.

Il sistema dispone anche di una parte WebServices API che gira su IIS opportunamente configurato che permette l'interconnessione e lo scambio dati con App e portali web Blazor che fanno sempre parte della piattaforma software che sviluppo.

E qui viene la mia domanda: al momento l'unico modo per far si che il cliente si connetta alla sua azienda è che disponga di un ip pubblico e una porta aperta sul suo router nattata sulla porta del server su cui è abilitato il webservice.

C'è un modo per far si che il cliente non debba necessariamente aprire una porta sul router e disporre di un ip pubblico?

Questo perchè molti clienti a volte hanno banalissime connessini adsl sperdute in paesini e non hanno alcuna competenza tecnica per aprire porte o richiedere ip pubblici al provider internet.

Ho visto che ad esempio PowerBI di Microsoft installa una sorta di Gateway il quale permette la connessione dei report realizzati sul loro cloud alla fonte dati SQL installata sul PC dove viene installato il gateway.

E' un dilemma che mi porto avanti da anni ma non ho mai trovato risposte nè tutorial.

Grazie a chi vorrà darmi dei consigli.

5 Risposte

  • Re: C# webapi

    Risposta corta:

    NO

    Risposta lunga: SENZA un IP pubblico, tu NON PUOI ACCEDERE ad un IP di una rete locale

    Una volta che hai un IP pubblico, ci sono diverse soluzioni alternative. Ad esempio l'utilizzo di una VPN (Virtual Private Network).

    Poi ci sono cose ancora piu' strane: il tuo server si collega, mediante un opportuno software, ad un server remoto che fa da IP pubblico e da PONTE tra lui e la tua macchina locale. Ad esempio 

    https://localxpose.io/

    (o servizi simili) 
    MA devi pagare ;-)

    OPPURE ti appoggi ad un PC sul Cloud (Microsoft Azure, Google Coud Platform, ...)
    Ma COMUNQUE ti serve l'IP pubblico!

    Attento: l'IP pubblico CAMBIA NEL TEMPO, quindi NON TI BASTA avere un IP, 
    ti serve anche un servizio DNS che mantiene il NOME costante ma che viene aggiornato con l'IP ogni tot minuti/ore. 

    Cosi, anche se l'IP cambia, non te ne accorgi.

    ---

    DIciamo che se ti affidi ad un professionista, il tizio e' in grado di fornirti le soluzioni in base alle TUE SPECIFICHE neccessita'.

    Ho visto che ad esempio PowerBI di Microsoft installa una sorta di Gateway il quale permette la connessione dei report realizzati sul loro cloud alla fonte dati SQL installata sul PC dove viene installato il gateway.

    E' il gateway, lato CLIENT, che si CONNETTE al server su Azure e gli spara i dati.
    NON E' il server su Azure che richiede i dati al client. Questo  NON E' POSSIBILE.
    e PowerBI (almeno quello che conosco io) gira SUL CLIENT, NON sul server!
    Quindi puo' tranquillamente comandare il gateway, visto che si trova sulla stessa macchina o comunque sulla rete locale.

  • Re: C# webapi

    Praticamente la soluzione migliore è installare una VPN

  • Re: C# webapi

    07/02/2025 - migliorabile ha scritto:

    Risposta corta:

    NO

    Risposta lunga: SENZA un IP pubblico, tu NON PUOI ACCEDERE ad un IP di una rete locale

    Una volta che hai un IP pubblico, ci sono diverse soluzioni alternative. Ad esempio l'utilizzo di una VPN (Virtual Private Network).

    Ciao, grazie intanto delle risposte.

    Allora diciamo che lo scopo finale di questa cosa sarebbe far si che il cliente, una volta installato il suo gestionale software, ci si possa interfacciare da remoto tramite App e Web ma soprattutto la cosa deve essere "bi-direzionale" ossia non basta semplicemente consultare i dati perchè quello già oggi lo fa tramite appunto App e portale Web...in pratica ho fatto si che la parte webserver del cliente comunichi ad un nostro webserver cloud il proprio IP anche qualora questo dovesse cambiare....dopodichè quando lui si logga tramite il portale ho un elenco di account che a seconda della Company del cliente so a quale IP pubblico andare a connettermi per pescare i dati dal suo WebServer/API...ovviamente deve necessariamente esserci una porta aperta....e questo è in realtà il problema perchè molti dei nostri clienti non sanno nemmeno cosa sia una porta o un router

    Io mi immagino un modo in cui il cliente si installa il software ed automaticamente una volta che inizia a registrare i dati ci si possa collegare dall'esterno tramite l'app ad esempio sincronizzandolo con un QR code....vedo sempre di più che oggi oggetti tipo termostati wifi o robe simili in un attimo si collegano all'app di gestione e questa permette il totale controllo del device...il tutto senza minimamente toccare porte o ip pubblici....

    Mi piacerebbe arrivare a qualcosa di simile...spero di essermi spiegato al meglio.

    Grazie ancora.

  • Re: C# webapi

    Io mi immagino un modo in cui il cliente si installa il software ed automaticamente una volta che inizia a registrare i dati ci si possa collegare dall'esterno tramite l'app ad esempio sincronizzandolo con un QR code.

    NO, NON LO SI PUO' FARE.

    Queste sono le BASI del protocollo TCP/IP e di tutto quello che ci sta sopra tra cui l'HTTP.

    Inoltre, questo genererebbe buchi, che dico buchi, voragini, che dico voragini, intere spianate aperte, in termini di sicurezza.

    E' SEMPRE IL CLIENT che inizia la comunicazione verso il server. MAI il contrario.

    Pero', una volta che il client ha aperto il canale, questo puo' rimanere aperto indefinitamente, con opportuni trucchi. 

    MA anche questo non e' una buona cosa perche occupa risorse lato server.

    Inoltre, TUTTI gli apparati di rete sono 

    1. PRE configurati per far si che un client possa collegarsi dove vuole e
    2. PRE configurati affinche dall'esterno NESSUNO, di SUA iniziativa, possa collegarsi al client (che puo' essere a sua volta un server)

    .

    Ti consiglio di STUDIARE come funzionabo le reti. 

  • Re: C# webapi

    10/02/2025 - migliorabile ha scritto:

    Io mi immagino un modo in cui il cliente si installa il software ed automaticamente una volta che inizia a registrare i dati ci si possa collegare dall'esterno tramite l'app ad esempio sincronizzandolo con un QR code.

    NO, NON LO SI PUO' FARE.

    Queste sono le BASI del protocollo TCP/IP e di tutto quello che ci sta sopra tra cui l'HTTP.

    Inoltre, questo genererebbe buchi, che dico buchi, voragini, che dico voragini, intere spianate aperte, in termini di sicurezza.

    E' SEMPRE IL CLIENT che inizia la comunicazione verso il server. MAI il contrario.

    Pero', una volta che il client ha aperto il canale, questo puo' rimanere aperto indefinitamente, con opportuni trucchi. 

    MA anche questo non e' una buona cosa perche occupa risorse lato server.

    Inoltre, TUTTI gli apparati di rete sono 

    1. PRE configurati per far si che un client possa collegarsi dove vuole e
    2. PRE configurati affinche dall'esterno NESSUNO, di SUA iniziativa, possa collegarsi al client (che puo' essere a sua volta un server)

    .

    Ti consiglio di STUDIARE come funzionabo le reti. 

    Non sono un sistemista ma le basi di rete, port forwarding e regole TCP le conosco....

    E' evidente e so benissimo che non è possibile collegarsi dall'esterno ed aprire una connessione TCP senza quanto meno aprire porte ed impostare regole su firewall...sarebbe molto grave se fosse così semplice...non siamo proprio all'ABC su....

    Io mi riferivo ad altro.....torno all'esempio di Power BI: io ho provato da un cliente ad installare il loro Gateway e magicamente senza aprire porte nè sapere IP pubbici ecc dall'altre parte, sul cloud di Power BI dove in pratica generi i report, puoi impostare come base dati l'indirizzo del gateway che ti crea lui dall'altra parte....il bello è che è pure molto veloce nel caricamento dati dunque devo supporre che l'accesso al dato è in qualche modo diretto ma veramente non riesco a capire come diavolo facciano ...

    Il concetto che vorrei realizzare è qualcosa di simile....realizzare una sorta di gateway affinchè dall'esterno ogni cliente possa connettersi al proprio sistema e poter interagire direttamente su database....mi andrebbe benissimo anche un service WCF che espone le chiamate...ho già fatto dei servizi WCF....il problema anche li è sempre lo stesso, aprire porte e rendere il servizio accessibile dall'esterno.

    L'alternativa sarebbe hostare tutto in cloud, ma purtroppo questi gestionali che realizziamo talvolta interagiscono con hardware che a loro volta necessitano di accesso ai dati molto rapidi con tempi di latenza bassissimi....

    Grazie ancora.

Devi accedere o registrarti per scrivere nel forum
5 risposte