Avatar billede bierchen Nybegynder
16. maj 2004 - 20:53 Der er 22 kommentarer og
1 løsning

HTTP protocol violation ved læsning af XML

Hej Eksperter

Når jeg forsøger at indlæse et xml dokument vha.

Adresse = "http://test.dk:8000/FORESP:"
Dim mitXmlDokument As New XmlDocument
mitXmlDokument.Load(Adresse)
Return mitXmlDokument

Så får jeg følgende fejl:
An unhandled exception of type 'System.Net.WebException' occurred in system.xml.dll

Additional information: The underlying connection was closed: The server committed an HTTP protocol violation.


Hvis jeg tilgår http://test.dk:8000/FORESP: via min Browser får jeg et flot Tagget XML dokument. Hvis jeg så gemmer dette XML dokument på min egen webserver, og skifter adressen i koden ud med: http://egenwebserver.dk/test.xml
Så virker min kode.....

Er det ikke muligt at sætte parametre på en URL ? Eller forventes der at man læser et rigtig dokument ?
Avatar billede arne_v Ekspert
16. maj 2004 - 20:58 #1
Er det korrekt at den URL ender i et kolon ?
Avatar billede arne_v Ekspert
16. maj 2004 - 20:58 #2
Og henter browseren det direkte eller sker der en redirect ?
Avatar billede bierchen Nybegynder
16. maj 2004 - 21:39 #3
Browseren henter det direkte. Den afslutter med et kolon. Jeg har flere parametre jeg kan sætte på, så jeg ikke ender med et kolon. Men stopper jeg med en forespørgsel der ligner ovenstående, så får jeg også et veltagget format.
Avatar billede arne_v Ekspert
16. maj 2004 - 21:54 #4
Hvad er test.dk port 8000 for en server ?
Avatar billede bierchen Nybegynder
16. maj 2004 - 22:03 #5
Det er en applikation som returnerer noget XML. Har du en ide ?
Avatar billede arne_v Ekspert
16. maj 2004 - 22:10 #6
"Additional information: The underlying connection was closed: The server committed an HTTP protocol violation."

betyder:

.NET mener at serveren i den anden ikke overholder HTTP protokollen

så det var da naturligt at undersøge lidt hvad det er for en.
Avatar billede bierchen Nybegynder
16. maj 2004 - 22:24 #7
Er der nogen måde jeg kan debugge mig igennem det, og så give dig http kommunikationen ?=
Avatar billede arne_v Ekspert
16. maj 2004 - 22:27 #8
Jeg syntes at det kunne være utroligt interessant at lave en lille
VB.NET app som hentede den XML fil via System.Net klasserne
(Http)WebRequest og (Http)WebResponse.

Samme fejl => så skal vi virkeligt fokusere på den server

Virker => put koden ind i din app og lav dit XML dokument fra XML streng
fremfor URL.
Avatar billede bierchen Nybegynder
16. maj 2004 - 22:39 #9
Jeg er ikke dus med .net endnu, hvordan laver jeg denne forespørgsel.
Avatar billede arne_v Ekspert
16. maj 2004 - 22:44 #10
Jeg har postet den her kode mange gange før:

Imports System
Imports System.IO
Imports System.Net
Imports System.Text

Class MainClass
  Public Shared Sub Main(ByVal args As String())
      Dim req As HttpWebRequest = CType(WebRequest.Create("http://www.microsoft.com/"), HttpWebRequest)
      Dim resp As HttpWebResponse = CType(req.GetResponse, HttpWebResponse)
      Dim stm As Stream = resp.GetResponseStream
      Dim c As Integer
      Dim res As StringBuilder = New StringBuilder
      dim more as boolean = true
      While (more)
          c = stm.ReadByte
          If (c >= 0) Then
              res.Append(Convert.ToChar(c))
          Else
              more = false
          End If
      End While
      stm.Close
      resp.Close
      Console.WriteLine(res.ToString)
  End Sub
End Class

prøv og sæt din URL ind og se hvad der sker.
Avatar billede bierchen Nybegynder
16. maj 2004 - 23:04 #11
Den laver samme fejl
Avatar billede arne_v Ekspert
16. maj 2004 - 23:14 #12
Mystisk.

Applikationen i den anden ende tester ikke på browser type ?
Avatar billede bierchen Nybegynder
16. maj 2004 - 23:20 #13
Skal den tage højde for at jeg kommer fra en VB.NET Application ?
Avatar billede arne_v Ekspert
16. maj 2004 - 23:22 #14
Det bør den ikke.

Men hvis nu den kun genererer et korrekt svar til IE !?

Jeg gætter kun.
Avatar billede bierchen Nybegynder
16. maj 2004 - 23:37 #15
Det virker ok, hvis man kører det fra en ASP side, via følgende kode:

Set objXML = CreateObject("MSXML2.DOMDocument.3.0")
objXML.async = False
'objXML.setProperty "ServerHTTPRequest", true
a=0
do
  a=a+1
  strXML = objXML.Load("http://test.dk:8000/FORESP:")
loop While finddata() = false and a < TimeOutRetry
Avatar billede bierchen Nybegynder
17. maj 2004 - 17:46 #16
Jeg har forsøgt at catche en web exception, når fejlen sker, og bed den om at udskrive exception.message og exception.stacktrace.
Kan du se noget ud af nedenstående ? Hvad kan jeg ellers gøre for finde fejlen på http serveren ?

The underlying connection was closed: The server committed an HTTP protocol viol
ation.
  at System.Net.HttpWebRequest.CheckFinalStatus()
  at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
  at System.Net.HttpWebRequest.GetResponse()
  at http_request.MainClass.Main(String[] args) in C:\Documents and Settings\Bj
ørn\My Documents\Visual Studio Projects\http request\Module1.vb:line 21
Avatar billede arne_v Ekspert
17. maj 2004 - 19:42 #17
Ikke specielt.

Det er stadigvæk:

The underlying connection was closed: The server committed an HTTP protocol violation.

Jeg må nok indrømme at jeg er lidt blank.
Avatar billede bierchen Nybegynder
18. maj 2004 - 00:05 #18
Vi fandt fejlen på vores Web-server som du havde en anelse om.

Web serveren er en "homemade". Det er utroligt det har virket til vores formål. Fejlen bestod i, at vi ikke sendte headers med tilbage.

Nedenstående er de headers vi sender med, så det kommer til at virke !!

ReturData = "HTTP/1.0 200 OK" + vbCrLf
ReturData = ReturData + "Server: Navnet på Min egen Webserver" + vbCrLf
ReturData = ReturData + "Connection: Keep-Alive" + vbCrLf
ReturData = ReturData + "MIME-version: 1.0" + vbCrLf
ReturData = ReturData + "Content-Type: text/xml" + vbCrLf
ReturData = ReturData + "Content-length: " + Format(Len(a$)) + vbCrLf
Avatar billede bierchen Nybegynder
18. maj 2004 - 00:07 #19
Lægger du ikke et svar, så skal jeg give dig nogle points, som tak for hjælpen, og den tid du har brugt på det.
Avatar billede bierchen Nybegynder
18. maj 2004 - 00:42 #20
Du får lige et bonus spørgsmål:

Kan man ændre timeouten på, hvor lang tid der må gå, hvis en xml kilde ikke findes med f.eks. mitxmldok.load(adresse). Når min xml-kilde ikke er tilstede, tager den en krig om at time ud.
Avatar billede arne_v Ekspert
18. maj 2004 - 07:03 #21
Forklaringen er nok at MSIE og XMLHTTP bruger noget gammelt kode som er fra
dengang hvor ikke alle web servere var lige korrekte så de er kodet til at være
meget tolerante over for web serveren. .NET er meget nyere og har sikkert antaget
at web server programmørerne havde fundet ud af det (og iøvrigt er der jo næsten
ku Apache og IIS tilbage).
Avatar billede arne_v Ekspert
18. maj 2004 - 07:03 #22
svar
Avatar billede arne_v Ekspert
18. maj 2004 - 07:05 #23
Justere time out ?

xmldoc.Load - nej det tror jeg ikke

(Http)WebRequest hent string og put den i dokument - ja (fordi den klasse har en Timeout
property)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester