Fehlermeldung/Methodenausführzeit

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Runshak.

    Fehlermeldung/Methodenausführzeit

    Hallo,

    ich habe in meiner Server/Client Anwendung jetzt eingebaut, dass der Client ne Aufgabe anstößt, die der Server ausführt...

    Funktion 1
    Client verbindet sich mit Server -> Server gibt String zurück

    Funktion 2
    Client verbindet sich mit Server -> Server gibt Primzahlen zurück (ebenfalls einen String)

    beides läuft...erst ab einer gewissen Stringlänge bricht es ab und ich bekomme eine Fehlermeldung (siehe Anhang)

    Das ganze habe ich jetzt umgebaut und die Funktionen mal in ein separates Programm gepackt...dort läuft es und gibt selbst Strings zurück, die über 1.000.000 Zeichen lang sind...

    in meinem WCF Client/Server Prog bricht das aber jedesmal innerhalb der Schleife ab...was ich komisch finde...deswegen kam mir der Gedanke dass die Zeit überschritten wird und es deswegen abbricht...also quasi dass jede Methode so und so viel Zeit bekommt und wenn diese überschritten wird, dass es dann abbricht...gibt es da im Zusammenhang mit WCF vllt ne Defaultzeit, die man ändern kann oder bin ich mit meiner Idee auf dem Holzweg?


    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim chars As Char() = "abcdefghijklmnopqrstuvwxyzßABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890<>|µ²³\!§$%&/?=#+-".ToCharArray()
    2. Dim data As Byte() = New Byte(0) {}
    3. Dim crypto As New RNGCryptoServiceProvider()
    4. crypto.GetNonZeroBytes(data)
    5. data = New Byte(maxSize - 1) {}
    6. crypto.GetNonZeroBytes(data)
    7. Dim result As New StringBuilder(maxSize)
    8. For Each b As Byte In data
    9. result.Append(chars(b Mod (chars.Length - 1)))
    10. Next
    11. Return result.ToString()


    Innerhalb der For Each Schleife hört er irgendwann auf und gibt die angehängte Fehlermeldung zurück...
    Bilder
    • Fehlermeldung.png

      56,58 kB, 1.152×648, 231 mal angesehen
    Naja, es wird wohl eine lange Zeit dauern, 'ne Million zufällige Zeichen in 'nen String zu basteln. Mal vom extremen Speicherverbrauch abgesehen.
    Bist Du sicher, dass das Programm in der For-Schleife abbricht, und nicht erst beim Zurücksenden? Denn die Fehlermeldung sagt was über die maximale Länge der Nachricht aus, was darauf hindeutet, dass das Problem beim Senden der Daten auftritt.

    Übrigens: Verwendest Du Pokemon ExceptionHandling?
    Denn im Normalfall springt die IDE selbst da hin, wo das Problem auftitt, was ja durch die MessageBox nicht mehr passiert.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    naja ich hab halte punkte gesetzt und bin schritt für schritt durchgegangen...und irgendwann bricht es ab...und da hat das prog die schleife noch nicht verlassen...

    was ist Pokemon ExceptionHandling? -> was ist zu verbessern bzw schlecht daran...

    wenn ich den String kürzer wähle (bsp 10.000) läuft es...

    [edit]

    ich habe jetzt mal meinen TryCatch Block deaktiviert und bekomme jetzt folgende Meldung

    Quellcode

    1. Beim Anforderungskanal ist während des Wartens auf eine Antwort nach 00:00:59.9979999 eine Zeitüberschreitung aufgetreten. Erhöhen Sie den an den Aufruf übergebenen Zeitlimitwert auf "Request", oder erhöhen Sie den SendTimeout-Wert für die Bindung. Der für diesen Vorgang zugewiesene Zeitraum war möglicherweise ein Teil eines längeren Timeouts.


    das erhärtet meinen Verdacht auf Zeitbegrenzung...

    leider fang ich damit nichts an, da dies für mich völliges Neuland ist...wo bau ich denn so ne Zeitverlängerung ein?

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

    Der Pokemon-Spruch ist "Gotta catch 'em all", also "Ich muss alle fangen".
    Übertragen auf Exceptions:

    VB.NET-Quellcode

    1. Try
    2. Catch ex As Exception 'Fängt ALLE Exceptions
    3. MessageBox.Show(ex.Message)
    4. End Try

    Man sollte fast nie alle Exceptions fangen, sondern, wenn überhaupt, nur ganz spezifische. Denn, wie Du festgestellt hast, wird durch die MessageBox die Funktion des Debuggers komplett unnütz. Nichts kann Dir die Exceptions besser anzeigen, als die IDE und der Debugger.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    ok danke...werde ich in zukunft berücksichtigen

    [edit]

    kannst du mir vllt noch erklären wie man das mit dem Timeout setzen einbaut?...meine Versuche werden nicht angenommen...

    Dim bhttpBinding As New BasicHttpBinding()
    Dim chFactory As New ChannelFactory(Of IHelloService)(bhttpBinding)
    bhttpBinding.MaxReceivedMessageSize = 1500000 -> die maximierung des zu übertragenden Zeugs hat geklappt...

    Dim mSpan As TimeSpan
    mSpan = New TimeSpan(12000000)
    bhttpBinding.ReceiveTimeout = mSpan
    -> das klappt hingegen überhaupt nicht allerdings hab ich auch keine Ahnung ob das überhaupt richtig ist/an der richtigen Stelle sitzt

    Zeitlimitwert auf "Request" setzen -> was in der Fehlermeldung stand hilft mir auch nicht weiter...

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

    Runshak schrieb:

    bhttpBinding.ReceiveTimeout = mSpan

    Fehlermeldung schrieb:

    erhöhen Sie den SendTimeout-Wert für die Bindung
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    In der Fehlermeldung steht, Du sollst die SendTimeout-Property setzten. Du setzt aber die ReceiveTimeout-Property.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils