Ausnahmefehler während einer WebClient-Anforderung

  • VB.NET

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    Ausnahmefehler während einer WebClient-Anforderung

    Ich bekomme bei :

    VB.NET-Quellcode

    1. My.Computer.Network.DownloadFile(url, My.Computer.FileSystem.SpecialDirectories.Temp & "\tmpimage.bmp", Nothing, Nothing, False, 100, True)


    Beim zweiten Download diese Fehlermeldung -> "Ausnahmefehler während einer WebClient-Anforderung." :thumbdown:

    Was mache ich Falsch?
    Meine Güte. Gebt doch einfach mal den StackTrace mit an. Da steht nämlich die Exception drin, die das Probldm ist. Außerdem solltest Du gleich nen WebClient verwenden und nicht den My-Namespace. Der wrappt das Ganze eh nur und das wohl sehr ranzig.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    VB.NET-Quellcode

    1. Try
    2. 'Dein WebClient Code
    3. Catch ex As Exception
    4. MsgBox(ex.StachTrace)
    5. End Try


    Ich fasse mal zusammen:
    Es geht mit WebClient auch nicht, wie der TE will

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Basis2“ ()

    Quellcode

    1. bei System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
    2. bei System.Environment.get_StackTrace()
    3. bei YDVM.Form1.Request_IMAGE(String url) in C:\Users\----\documents\visual studio 2010\Projects\YDVM\YDVM\Form1.vb:Zeile 23.
    4. bei YDVM.Form1.Button1_Click(Object sender, EventArgs e) in C:\Users\----\documents\visual studio 2010\Projects\YDVM\YDVM\Form1.vb:Zeile 48.
    5. bei System.Windows.Forms.Control.OnClick(EventArgs e)
    6. bei System.Windows.Forms.Button.OnClick(EventArgs e)
    7. bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    8. bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    9. bei System.Windows.Forms.Control.WndProc(Message& m)
    10. bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
    11. bei System.Windows.Forms.Button.WndProc(Message& m)
    12. bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    13. bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    14. bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    15. bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    16. bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    17. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    18. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    19. bei System.Windows.Forms.Application.Run(ApplicationContext context)
    20. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    21. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    22. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    23. bei YDVM.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
    24. bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    25. bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    26. bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    27. bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    28. bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    29. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    30. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    31. bei System.Threading.ThreadHelper.ThreadStart()


    Hier :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „XinSho“ ()

    Ich habe mein Problem selber herausgefunden!
    Trotzdem Danke :)

    Hier war mein Fehler ->

    VB.NET-Quellcode

    1. Dim i As Integer = 0 'Ohne eine Integer würde sich die Datei überschreiben, dennoch braucht mein Programm diese Datei noch. Habe jetz eine Integer gesetzt um denn Datenname von denn Anderen zu unterscheiden, und das sie, sie nicht überschreibt :)
    2. Dim webclient As Net.WebClient
    3. webclient = New Net.WebClient
    4. i += 1
    5. webclient.DownloadFile(url, My.Computer.FileSystem.SpecialDirectories.Temp & "\tmpimage" & i & ".bmp")
    Aua, ganz ehrlich aua.
    @Basis2 Bevor Du hier irgendwelchen Blödsinn verzapfst, lass es doch bitte einfach sein.
    1. Warum catchst Du das? Somit kann man erstmal alles durchlesen und sich die Zeile suchen anstatt direkt jene via IDE zu erhalten.
    2. MsgBox ist VB6-Ranz. MessageBox.Show verwenden, auch wenn es hier nur zum Catchen war.

    Basis2 schrieb:

    Es geht mit WebClient auch nicht, wie der TE will

    Was bitte?

    @XinSho Die Lösung ist ja von der Idee her vielleicht recht, aber total ranzig umgesetzt.
    1. Option Strict ON! Ein Integer ist KEIN String.
    2. Warum instanziierst Du nicht direkt in einer Zeile auf einmal?
    3. Environment.SpecialFolders verwenden, vergiss doch endlich mal den My-Namespace.
    4. Path.Combine nutzen, das ist ja schrecklich anzuschauen. ;)
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ich bin mal so frech und nutze die Gelegenheit mich selbst zu prüfen. :D
    Und zwar, ob ich die Kritik von Trade vollständig richtig verstanden und umgesetzt habe:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim url As String = ""
    2. Dim path As String
    3. Dim i As Integer = 0
    4. Dim webclient As New Net.WebClient
    5. Dim temp As String = IO.Path.GetTempPath
    6. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    7. i += 1
    8. path = IO.Path.Combine(temp & "\tmpimage" & i.ToString & ".bmp")
    9. webclient.DownloadFile(url, path)
    10. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „timonator“ ()

    Hab geguckt, schön das du IO.Path.Combine reineditiert hast, aber wo ist jetzt der Pfad zum Tempordner?

    Edit @Trade mit Environment.SpecialFolders kommst du glaub ich nicht an den Pfad zum Tempordner, mit IO.Path.GetTempPath schon.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Murdock“ ()

    @Basis2 Du hast anscheinend gar nicht verstanden worum es beim Programmieren geht.
    Richtig, der User will, dass es funktioniert. Dazu muss das Programm aber sauber geschrieben sein etc. Also: Nein, ist nicht egal.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Der My-Namespace wrappt so Sachen. Und zwar so ziemlich auf die ranzigste Weise, die nur geht. Und das ist nicht unbedingt grade performant.
    Folglich sollte klar sein, warum IO sauberer ist und man das verwenden sollte.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    timonator schrieb:

    Ich bin mal so frech und nutze die Gelegenheit mich selbst zu prüfen.
    Hmm - kompiliert ja nichtmal.
    Ansonsten wichtig ist immer gute Kapselung, also dass man nicht mehr Klassenvariablen in einer Klasse rumzufahren hat als unbedingt nötig.
    Käme bei mir dann erstmal so raus:

    VB.NET-Quellcode

    1. Public Class frmTests
    2. Dim url As String = ""
    3. Dim i As Integer = 0
    4. Dim webclient As New Net.WebClient
    5. Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    6. i += 1
    7. Dim path = IO.Path.Combine(IO.Path.GetTempPath, "tmpimage" & i & ".bmp")
    8. webclient.DownloadFile(url, path)
    9. End Sub
    10. '...

    ErfinderDesRades schrieb:

    dass man nicht mehr Klassenvariablen in einer Klasse rumzufahren hat als unbedingt nötig
    Das ist jetzt so ein typischer Streitfall, ob man den Temp-Pfad jedesmal neu nachschauen muss oder ihn in einer Variable hält.
    Sicher wird IO.Path.GetTempPath sehr effizient sein, andererseits ist das Ergebnis auch so statisch, dass man nicht zwingend jedesmal das Framework bemühen müsste.

    Bei aufwendigeren Aufrufen kann es sich schon lohnen, so ein Ergebnis zwischenzuspeichern.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --