59 messaggi dal 21 luglio 2006
Ho la necessità di scaricare un file remoto dalla seguente pagina Web:
http://www1.agenziaentrate.gov.it/servizi/TafDis/download.php?&tipofile=DIST&iduff=OR1

ho pertanto scritto il seguente codice VB.net:
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim client As New WebClient()
        AddHandler client.DownloadProgressChanged, AddressOf ShowDownloadProgress
        AddHandler client.DownloadFileCompleted, AddressOf OnDownloadComplete
        client.DownloadFileAsync(New Uri("http://www1.agenziaentrate.gov.it/servizi/TafDis/download.php?&tipofile=DIST&iduff=OR1"), My.Computer.FileSystem.SpecialDirectories.Desktop & "/Dist.zip")


    End Sub

    Private Sub OnDownloadComplete(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
        If Not e.Cancelled AndAlso e.Error Is Nothing Then
            MessageBox.Show("DOwnload success")
        Else
            MessageBox.Show("Download failed")
        End If
    End Sub

    Private Sub ShowDownloadProgress(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs)
        ProgressBar1.Value = e.ProgressPercentage
    End Sub

End Class

ma purtroppo mi da il seguente errore:
e.Error = {"Connessione sottostante chiusa: Errore imprevisto durante un'operazione di invio.."}
eppure utilizzando il seguente link direttamente su internet funziona perfettamente, come è possibile?
Ho provato il codice sia con il S.O. windows XP che Windows 10 Home. Qualcuno può aiutarmi?
Grazie

Giorgio
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Giorgio,
subito prima di creare l'istanza del WebClient, metti questa riga per forzare l'uso del protocollo TLS 1.2.
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12


A quel punto funziona.

ciao,
Moreno

Enjoy learning and just keep making
59 messaggi dal 21 luglio 2006
Ciao Moreno,
ho aggiunto il tuo codice, ma il codice VB non accetta Tls12 e propone Tls o Ssl3, gli ho provati entrambi, ma il problema persiste.
Ti riporto il codice corretto:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
        Dim client As New WebClient()
        AddHandler client.DownloadProgressChanged, AddressOf ShowDownloadProgress
        AddHandler client.DownloadFileCompleted, AddressOf OnDownloadComplete
        client.DownloadFileAsync(New Uri("http://www1.agenziaentrate.gov.it/servizi/TafDis/download.php?&tipofile=DIST&iduff=OR1"), My.Computer.FileSystem.SpecialDirectories.Desktop & "/Dist.zip")
    End Sub

Giorgio
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


il codice VB non accetta Tls12

Ok, probabilmente stai compilando l'applicazione per una versione del framework inferiore alla 4.5, versione in cui è stato introdotto per la prima volta il supporto al protocollo Tls 1.2.
Leggi qui per sapere cosa fare in caso tu stia usando il framework 4.0 o 3.5.
https://blogs.perficient.com/microsoft/2016/04/tsl-1-2-and-net-support/


propone Tls o Ssl3,

Il server dell'Agenzia delle Entrate, per motivi di sicurezza, supporta solo Tls 1.2, come puoi vedere qui.
https://www.ssllabs.com/ssltest/analyze.html?d=www1.agenziaentrate.gov.it&latest
Non puoi usare altri protocolli.

ciao,
Moreno
Modificato da BrightSoul il 21 marzo 2018 18.11 -

Enjoy learning and just keep making
59 messaggi dal 21 luglio 2006
Ciao Moreno,
in effetti ho compilato l'applicazione con una versione del framework 4.0, utilizzando visual basic 2010 express edition, software che permette di usare solo il framework 4.0 o inferiore o sbaglio? quindi ho provato a migrare la mia applicazione in visual studio 2017 comunity, ma non riconosce il database presente nella stessa, realizzato con Microsoft SQL Server Compact Edition 3.50, puoi suggerirmi un sistema per convertire il database suddetto con uno compatibile con VS 2017?
Grazie

Giorgio
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Giorgio,
per il momento puoi continuare a usare Visual Studio 2010. Nell'articolo che ti ho girato, viene detto questo a proposito delle applicazioni .NET 4.0.


.NET 4.0. TLS 1.2 is not supported, but if you have .NET 4.5 (or above) installed on the system then you still can opt in for TLS 1.2 even if your application framework doesn't support it. The only problem is that SecurityProtocolType in .NET 4.0 doesn't have an entry for TLS1.2, so we'd have to use a numerical representation of this enum value:

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;


Quindi puoi continuare a compilare la tua applicazione per .NET 4.0 purché sulla macchina in cui gira sia stato installato .NET 4.5 o superiore (es. su Windows 10 lo è). Devi semplicemente modificare la riga in cui si assegna il security protocol. In Vb.NET fai semplicemente così:

ServicePointManager.SecurityProtocol = 3072


Fammi sapere come va.
Moreno
Modificato da BrightSoul il 27 marzo 2018 13.38 -

Enjoy learning and just keep making
59 messaggi dal 21 luglio 2006
Ciao Moreno,
ok sono riuscito, ora mi permette di accedere alla pagina web dove riesco a leggere la data "famosa" come ti avevo spegato nel precedente post, ma purtroppo mi segnala un errore nella convesione della stringa data (formato 05-MAR-18), ti riporto il codice:
Dim Testo As String = _
           System.Text.RegularExpressions.Regex.Replace( _
           Scarica(URL), "<[^>]*>", "")
        If Testo <> "False" Then
            Dim posizT As Integer = Testo.LastIndexOf("Download TAF     Ultimo aggiornamento:")
            Dim posizM As Integer = Testo.LastIndexOf("Download DIS     Ultimo aggiornamento:")
            Dim dataggUltT As Date = Convert.ToDateTime(Testo.Substring(posizT + 40, 9))
            Dim dataggUltM As Date = Convert.ToDateTime(Testo.Substring(posizM + 39, 9))

dove mi segnala:
stringa non riconosciuta come valore datatime valido
eppure ha sempre funzionato, ho riportato il codice in visual studio 2017 comunity è funziona perfettamente, non penso si dovuto al fatto di aver aggiunto il codice security protocol o no?
Hai qualche idea su questo errore?
Grazie

Giorgio
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Giorgio, ok, ne siamo venuti a capo.

Il parsing della data va in errore perché 05-MAR-18 non è tra i formati noti al .NET Framework. Tuttavia, puoi usare DateTime.ParseExact per parsare la data indicando tu il formato. Esempio:
Dim data as DateTime = DateTime.ParseExact("15-MAR-18", "dd-MMM-yy", New CultureInfo("it-IT"))


Ecco la documentazione:
https://docs.microsoft.com/it-it/dotnet/standard/base-types/parsing-datetime#parseexact

Ed ecco un fiddle:
https://dotnetfiddle.net/BEDoAM

ciao,
Moreno
Modificato da BrightSoul il 27 marzo 2018 23.56 -

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.