6 messaggi dal 09 febbraio 2012
Salve ragazzi, una domanda: dovrei consumare, da una pagina aspx, un webservice (di cui ho l'URL) per l'invio di un file xml. Sto utilizzando HttpWebRequest e HttpWebResponse.
L'URL è del tipo: http:xxx.xxx:yyyy/zzz.php
Ora, se provo in locale (ossia in produzione) l'esecuzione va a buon fine, mentre se provo da www (in pubblicazione) ricevo l'errore "Unable to connect to the remote server". Il provider è Aruba e ho il Full Trust. Ho anche provato a inserire nel web.config defaultProxy useDefaultCredentials="true" enabled="true", ma nulla.
Di cosa si tratta? Cosa devo verificare?
Grazie per le risposte
11.381 messaggi dal 09 febbraio 2002
Contributi
Ciao,
non sono sicuro di quale possa essere il problema. Dato che in locale ti sta funzionando, al momento sono portato credere che Aruba abbia delle restrizioni sulle chiamate verso l'esterno. Anche se inusuale, potrebbe essere che il loro firewall stia bloccando le richieste HTTP su porte in uscita diverse da quelle canoniche, cioè la 80 (HTTP) e la 443 (HTTPS).

Hai scritto:
http:xxx.xxx:yyyy/zzz.php

Confermi che la porta non è né la 80 né la 443? Il protocollo è http come hai scritto? O https?

Per il momento prova a contattare l'assistenza di Aruba per sapere se esistono blocchi sulle richieste in uscita.

ciao,
Moreno

PS.

Ora, se provo in locale (ossia in produzione) l'esecuzione va a buon fine, mentre se provo da www (in pubblicazione)

Per un attimo ho rischiato di fraintenderti. Avresti dovuto scrivere:

Ora, se provo in locale (ossia in sviluppo) l'esecuzione va a buon fine, mentre se provo da www (in produzione)

Il termine "produzione" si usa per indicare l'applicazione pubblicata sul server a cui accedono tutti gli utenti.

Enjoy learning and just keep making
6 messaggi dal 09 febbraio 2012
Ciao, Moreno, chiedo venia per l'uso improprio del termine 'produzione' anziché 'sviluppo', mi ero confuso.
Ad ogni modo confermo che il protocollo è http e la porta è 65531.
Grazie 1000 per l'aiuto
Ciao, Enzo
11.381 messaggi dal 09 febbraio 2002
Contributi
Ciao Enzo,


Ciao, Moreno, chiedo venia per l'uso improprio del termine

Ma no, figurati, non ti preoccupare. Te l'ho fatto notare giusto perché così non verrai frainteso in futuro.

Ad ogni modo confermo che il protocollo è http e la porta è 65531.

Ok, allora sì, fai presente all'assistenza di Aruba che stai cercando di fare una richiesta a quella porta e vediamo che rispondono.
Nel frattempo puoi fare altre prove: ad esempio puoi crearti una nuova pagina aspx da cui usi gli oggetti HttpWebRequest e HttpWebResponse per inviare una richiesta GET a un altro indirizzo, per esempio a http://example.org/ e leggere quello che ti manda come risposta (riceverai l'html di quella pagina).

Se la richiesta va a buon fine, vuol dire che il tuo codice è ok e che Aruba ti lascia inviare richieste in uscita (almeno finché sono dirette verso le porte canoniche, la 80 in questo caso).

Nel frattempo posta anche il codice che usi per inviare il contenuto XML al web service.

ciao,
Moreno
Modificato da BrightSoul il 12 marzo 2019 08:04 -

Enjoy learning and just keep making
6 messaggi dal 09 febbraio 2012
Confermato dall'assistenza Aruba: x motivi di sicurezza solo porte standard.
Ad ogni modo, affinché possa essere di aiuto x altri, posto il codice della chiamata al webservice x upload file xml (che mi confermano funziona)
Grazie ancora per l'aiuto

//url_fornitore = http:xxx.yyy:zzzzz/kkk.php
//fs = nome del file xml generato


Dim objRequestStream As Stream = Nothing
Dim objResponseStream As Stream = Nothing

Try
Dim xmlString As String = File.ReadAllText(Server.MapPath(fs))
Dim contentAsBytes As Byte() = Encoding.UTF8.GetBytes(xmlString)

Dim request_ As HttpWebRequest = DirectCast(WebRequest.Create(url_fornitore), HttpWebRequest)
request_.Method = "POST"
request_.ContentType = "application/x-www-form-urlencoded"
request_.ContentLength = contentAsBytes.Length

objRequestStream = request_.GetRequestStream()
objRequestStream.Write(contentAsBytes, 0, contentAsBytes.Length)
objRequestStream.Close()

Dim resp_ As HttpWebResponse = DirectCast(request_.GetResponse(), HttpWebResponse)
If resp_.StatusCode = HttpStatusCode.OK Then
Return "L\'\ ordine è stato inoltrato correttamente al fornitore."
End If
resp_.Close()
' Using fss As FileStream = New FileStream(Server.MapPath(fs), FileMode.Open, FileAccess.Read)
Return resp_.StatusCode.ToString
'Return String.Empty

' End Using

Catch ex As WebException
'DirectCast(ex.Response, HttpWebResponse).StatusDescription
Return ex.Message 'ex.Message '"Attenzione! Si sono verificati errori (" + DirectCast(ex.Response, HttpWebResponse).StatusDescription + ") nell\'\invio. Riprova, e se il problema sussiste ti preghiamo di contattare il nostro staff. Grazie."

Catch ex As Exception
Return "Attenzione! Si sono verificati errori (GENERICO) nell\'\invio. Riprova, e se il problema sussiste ti preghiamo di contattare il nostro staff. Grazie."
' Finally

End Try
11.381 messaggi dal 09 febbraio 2002
Contributi
Confermato dall'assistenza Aruba: x motivi di sicurezza solo porte standard.

Ok, buono a sapersi.

Quindi... non potendo inviare la richiesta direttamente devi trovare una soluzione alternativa. Hai già pensato a come fare?

Enjoy learning and just keep making
6 messaggi dal 09 febbraio 2012
Mi dicono: server dedicato o cloud.

Che mi consigliate? Caratteristiche?
11.381 messaggi dal 09 febbraio 2002
Contributi
Ciao,


Mi dicono: server dedicato o cloud.

Mi sembra un po' drastica come soluzione. Se ti procuri un server dedicato, non solo dovrai sostenere costi maggiori ma ti dovrai occupare anche della manutenzione e del backup della macchina. È una bella responsabilità: se lo fai solo per risolvere il problema delle richiesta dovresti ripensarci. Se invece lo fai anche per altri motivi, allora devi valutare tu se il gioco vale la candela.

Soluzioni per restare in hosting condiviso sono:
  • Spostarti da Aruba verso un altro provider di hosting condiviso che ti permetta di inviare la richiesta;
  • Contattare le persone che hanno realizzato il webservice PHP e chiedergli di ospitarlo su porta 443, protetta da certificato SSL, dato che ad oggi con la normativa del GDPR non è più tollerabile avere un serizio esposto su HTTP;
  • Usare un servizio nel cloud che faccia da proxy per la tua richiesta, in modo che tu possa inviare la richiesta verso il proxy alla porta 80 o 443 e poi ci pensa lui a reinoltrarla alla porta 65531 del servizio PHP. Da una rapidissima ricerca è venuto fuori questo, ma io non l'ho mai provato e non so neanche se effettivamente possa offrirti il servizio proxy di cui ti ho parlato. Dovrai approfondire tu.
    https://www.moesif.com/docs/proxy-integration/cloud-proxy/#


ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.