Welcome, Guest
Username: Password: Remember me
Hier wird Deutsch gesprochen
  • Page:
  • 1

TOPIC:

Net Sprache 16 Sep 2022 12:00 #23882

  • Horst
  • Horst's Avatar
  • Topic Author


  • Posts: 293
  • Hallo
    Dank Wolfgangs Beispiel cHttpBasic konnte ich einige meiner Fehler beheben.

    Da viel mir was auf
    Das wird kompiliert
    LOCAL ohttpRequest	AS System.Net.HttpWebRequest
    ohttpRequest	:= ( System.Net.HttpWebRequest ) System.Net.HttpWebRequest:Create("https://api.bexio.com/2.0/contact")
    und das nicht
    LOCAL ohttpRequest	AS System.Net.HttpWebRequest
    ohttpRequest	:= System.Net.HttpWebRequest:Create("https://api.bexio.com/2.0/contact")

    Da frage ich mich warum.

    Gruss Horst

    Please Log in or Create an account to join the conversation.

    Net Sprache 16 Sep 2022 12:51 #23883

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3366
  • Hallo Horst,
    der Unterschied zwischen den beiden Versionen ist ein sogenannter Cast.
    Der sagt dem Compiler, daß
    System.Net.HttpWebRequest:Create("https://api.bexio.com/2.0/contact")
    ein Objekt vom Typ
    System.Net.HttpWebRequest
    zurückliefert.
    Typisiert ist diese Methode nämlich als
    System.Net.WebRequest
    und in der Doku steht drin:
    "A WebRequest descendant for the specific URI scheme."
    Der genaue Typ der Rückgabe hängt also von der URL ab.
    Wenn man das ganz sauber programmieren wollte, und eventuelle Fehler abfangen, dann könnte man das sogar so schreiben:
    local oTemp as System.Net.WebRequest
    oTemp := System.Net.HttpWebRequest:Create("https://api.bexio.com/2.0/contact")
    if oTemp is System.Net.HttpWebRequest
      ohttpRequest := ( System.Net.HttpWebRequest ) oTemp
    else
      // Fehlerbehandlung
    endif
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Net Sprache 16 Sep 2022 14:25 #23889

    • robert
    • robert's Avatar


  • Posts: 3599
  • Wolfgang,

    Hallo Horst,
    Wenn man das ganz sauber programmieren wollte, und eventuelle Fehler abfangen, dann könnte man das sogar so schreiben:
    local oTemp as System.Net.WebRequest
    oTemp := System.Net.HttpWebRequest:Create("https://api.bexio.com/2.0/contact")
    if oTemp is System.Net.HttpWebRequest
      ohttpRequest := ( System.Net.HttpWebRequest ) oTemp
    else
      // Fehlerbehandlung
    endif

    I would code it like this
    if oTemp is System.Net.HttpWebRequest VAR ohttpRequest 
      // do your thing
    else
      // Fehlerbehandlung
    endif
    The advantages:
    - there is no need for a separate declaration of ohttpRequest
    - the scope (life time ) of the variable is that of the IF statement

    Robert
    XSharp Development Team
    The Netherlands

    Please Log in or Create an account to join the conversation.

    Net Sprache 16 Sep 2022 16:11 #23894

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3366
  • Hi Robert,
    thank you very much for your comment.
    Personally I prefer to not use the "var" statement, but to define a variable explicetely in the header of the method, first to keep my code more readable (many years to come), and second to help XIDE with Intellisense.
    But that is a pure personal choice and I'm pretty sure many other programmers would not agree with me on this.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Net Sprache 16 Sep 2022 17:10 #23898

    • Horst
    • Horst's Avatar
    • Topic Author


  • Posts: 293
  • Hallo

    Das heisst der Compiler versucht links und rechts der Zuweisung den gleichen Datentyp zu erhalten.
    Er weiss also, dass ohttpRequest ein Objekt ist vom Typ System.Net.HttpWebRequest weil ich es im LOCAL definiert habe.

    Laut Hilfe gibt Create() einen WebRequest zurück , hmmm ein WebRequest ist kein HttpWebRequest darum muss man tricksen und ( System.Net.HttpWebRequest ) vorne ran schreiben . Richtig ?

    httpWebRequest erbt von WebRequest, da verhält sich .Net anders als VO oder ? VO würde da nicht reklamieren.

    Noch eine Frage. Wen ich den API Request von einer http Seite auf eine https Seite mache geht das ? Ich bekomme da die Fehlermeldung:
    Es konnte kein geschützter SSL/TLS-Kanal erstellt werden..

    Gruss
    Horst

    Please Log in or Create an account to join the conversation.

    Net Sprache 16 Sep 2022 17:50 #23900

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3366
  • Hallo Horst,
    nicht ganz: Du könntest einen Objekt, das als WebRequest definiert ist, ohne weiteres ein Objekt der Klasse HttpWebRequest zuweisen, aber nicht umgekehrt.
    Das geht in VO aber auch nicht, wenn die Methode/Funktion streng typisiert ist und der Rückgabewert nicht vom Typ "object" ist.
    Das mit dem Casten sagt dem Compiler nur: hör mal, das, was hier der Rückgabewert ist, ist ein Objekt der Klasse HttpWebRequest.
    Damit ist der Compiler zufrieden.
    Wenn zur Laufzeit das Objekt aber nicht den Typ hat, auf den gecastet wird, sondern einen inkompatiblen Typ, bekommst Du einen Laufzeitfehler.
    Was die Fehlermeldung betrifft: Wie Deine Seite aufgerufen wird, ist vollkommen gleichgültig - es ist Dein Prozeß, der die Verbindung aufbaut. Und wenn das Zertifikat der aufgerufenen Seite korrekt ist, sollte das funktionieren - außer die aufgerufene Seite verlangt mindestens TLS 1.2.
    Dann musst Du vor dem ersten Aufruf TLS 1.2 einschalten:
    System.Net.ServicePointManager.SecurityProtocol := System.Net.SecurityProtocolType.Tls12
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Net Sprache 16 Sep 2022 18:04 #23902

    • Horst
    • Horst's Avatar
    • Topic Author


  • Posts: 293
  • Hallo Wolfgang

    Ich könnte dich knuddeln.
    System.Net.ServicePointManager.SecurityProtocol := System.Net.SecurityProtocolType.Tls12
    und es funktionierte

    Danke
    Horst

    Please Log in or Create an account to join the conversation.

    • Page:
    • 1
    Moderators: wriedmann