Lo sviluppatore Web che invia la porta nel servizio web da server a client

0

Sto lavorando a un progetto in cui ho due siti Web (client e server). Ho aperto il servizio web e sto cercando di "inviare" un'immagine dal mio server al client

[WebMethod]
public string PictureUrl(string id)
{
    return "http://localhost:49400/Website13/images/" + "PICTURE NAME";
}

Funziona solo quando conosco la porta per il mio servizio web. Quello che sto cercando è se c'è qualche metodo in cui posso ottenere il mio servizio, anche se cambia, e rendere il codice "simile" a questo:

[WebMethod]
public string PictureUrl(string id)
{
    return "http://localhost:" + GET_PORT_METHOD + "/Website13/images/" + "PICTURE NAME";
}

e il, sarò in grado di utilizzare questo metodo nel mio client e ricevere l'immagine. (è come caricare un'immagine in un sito Web online e poi ottenere l'URL, ma poiché è solo un progetto che non sto acquistando un dominio, il mio server non sarà online).

    
posta Buk Lau 16.04.2015 - 08:16
fonte

2 risposte

1

È possibile evitare questo problema utilizzando un nome host senza una porta e lasciando la mappatura di tale nome host alla porta di destinazione sul server. In questo modo, quando la porta cambia (che è qualcosa che fai sul server) puoi anche cambiare la mappatura (che sarebbe anche sul server).

A seconda del server Web che stai utilizzando, puoi utilizzare Host Intestazioni (IIS) o Host virtuali basati sui nomi (Apache) . In questo modo, definisci " link " come l'URL e lascia che il server web gestisca la porta a cui indirizza l'URL.

In un approccio a più basso livello è possibile eseguire la scansione di tutte le porte (probabilmente l'opzione peggiore) o implementare qualcosa di simile al modo DHCP funziona dove il tuo client trasmette un messaggio tramite UDP e il server (che conosce l'indirizzo del client dalla trasmissione) risponde con le informazioni. Ma non c'è nulla nella tua domanda che non potresti risolvere usando il metodo sopra senza risolvere queste ulteriori implementazioni estreme .

    
risposta data 16.04.2015 - 17:38
fonte
0

JDT

Ci sono specifiche risposte di implementazione a questo problema sviluppato da vari stack di software, vedere la risposta di JDT.

Router

Penso che una soluzione abbastanza semplice sia quella di fare in modo che il router lo faccia per te. È possibile definire un mapping tra le richieste in entrata su una porta nota e statica sul router e sul server (incluso il numero di porta) a cui inoltrare le richieste.

Registro

Il problema generale, tuttavia, di provare a fare riferimento a un endpoint (host + porta di un servizio Web) quando non si conoscono tutte le variabili è stato risolto nelle grandi aziende utilizzando un servizio di registro (ad esempio WSRR). Una terza applicazione in una posizione nota nella rete che risponderà alla domanda: dove si trova questo servizio web? Ogni volta che il webservice cambia host o porta, è necessario aggiornare il registro con la sua nuova posizione.

Negozio di configurazione

L'equivalente più moderno del registro è quello di mantenere un archivio di configurazione distribuito, come Apache ZooKeeper , aggiornato con la posizione di tutti i sistemi nella tua rete. Ciò può agire in senso inverso rispetto al registro, in quanto è possibile aggiornare l'archivio di configurazione con ciò che si desidera che la configurazione di rete assomigli e gli osservatori risponderanno a tale modifica facendo ruotare il servizio nella posizione richiesta.

    
risposta data 16.04.2015 - 21:30
fonte

Leggi altre domande sui tag