Avatar billede blod_1 Nybegynder
28. december 2009 - 14:37 Der er 35 kommentarer

Webserver giver ikke gyldige svar

Jeg har gang i en webserver, og den giver et svar. Problemet er bare at det ikke er et gyldigt svar.

Når man bare kalder linket, så kommer svaret også fint nok frem i de fleste tilfælde, men i nogle tilfælde når svaret aldrig frem, og webserveren stopper helt med at svare.

Samtidig har jeg via ASP prøvet at kontakte serveren, og der er svaret så "The server returned an invalid or unrecognized response"


Er der en der kan gennemskue hvad der går galt?

Source kan findes her http://pastebin.com/m2f67fd7a
Avatar billede Syska Mester
28. december 2009 - 14:56 #1
Sikker på du svarer på den korekte måde som en http/https svar skal laves med header og det hele ?
Avatar billede blod_1 Nybegynder
28. december 2009 - 14:59 #2
Hehe, nej... Det er jeg ikke.

Den har SendHeader med i, hvor den burde blive lavet, men det kommer vist aldrig til hvor der faktisk bliver sendt et svar.
Efter at jeg forsøgte at koble det på, så fik jeg bare det hele på samme side som svaret, og samtidig samme besked om ugyldigt svar.
Avatar billede Syska Mester
28. december 2009 - 15:01 #3
Jeg har aldrig selv prøvet at lave en webserver, men det ser ud til at du er ved at lave ... så det er nok i den retning jeg vil kigge ... altså hvordan man opbygger det.

mvh
Avatar billede blod_1 Nybegynder
28. december 2009 - 15:11 #4
Også det jeg har gjort indtil nu, problemet er bare at alt jeg kan finde om det, er alt bygget op omkring samme guide jeg fulgte da jeg lavede min. Og de har alle dette problem.

Kombinere det med min ufatteligt brede viden om c#... eller mangel på samme, så giver det nogle problemer... :-/
Avatar billede Syska Mester
28. december 2009 - 15:19 #5
Sidste del kunne godt lyde lidt ironisk. :-)

Men hvad guide ? og har du skrevet til personen som har lavet den guide, ham må jo af alle personer kunne få det til at virke som det er tiltænkt ...

// ouT
Avatar billede blod_1 Nybegynder
28. december 2009 - 15:49 #6
Der er så også denne metode http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx

men den kan jeg slet ikke gennemskue at få til at gøre noget som helst...
Avatar billede arne_v Ekspert
28. december 2009 - 15:52 #7
Koden er lidt svært at iverskue, men:

Er der mellemrum mellem version og status kode ?

Mangler der ikke mellemrum plus status tekst efter status kode ?

Bliver sBuffer resat til "" mellem requests ?
Avatar billede arne_v Ekspert
28. december 2009 - 15:53 #8
Noget helt andet - når du nu bruger C# hvorfor bruger du ikke HttpListener klassen ?
Avatar billede blod_1 Nybegynder
28. december 2009 - 16:35 #9
Den har jeg også prøvet med, men den kan jeg slet ikke få til at gøre noget som helst.

http://pastebin.com/m1ef8c291

Bare det der giver mig

System.Net.HttpListenerException: Adgang nægtet
  ved System.Net.HttpListener.AddAll()
  ved System.Net.HttpListener.Start()
  ved httplistener_test.Form1..ctor() i C:\Users\Parx\AppData\Local\Temporary Projects\httplistener test\Form1.cs:linje 17

som er ved "HttpListenerContext ctx = listener.GetContext();"

Porten er fri, og med den ip kan det vel ikke blive forkert der?
Avatar billede arne_v Ekspert
28. december 2009 - 19:08 #10
Den virker jo hos andre.

Kan du poste noget komplet kode som vi kan køre - der viser fejlen ?
Avatar billede blod_1 Nybegynder
28. december 2009 - 19:14 #11
Har pakket det jeg har sammen i denne http://bld-live.dk/httplistener_test.rar

Har testet på 4 forskellige maskiner nu, de giver alle den samme fejl som jeg postede før. Så jeg må gøre et eller andet forkert hvor jeg vil åbne den?
Avatar billede arne_v Ekspert
28. december 2009 - 22:00 #12
for (; ; )
                {
                    HttpListenerContext ctx = listener.GetContext();
                    new Thread(new Worker(ctx).ProcessRequest).Start();
                }

starter det ikke uendeligt mange tråde ??
Avatar billede arne_v Ekspert
28. december 2009 - 22:02 #13
Nej - det gør det vel ikke. GetContext blokker vel indtil der kommer ny request.

Men det er stadig en uendelig løkke i din form constructor.
Avatar billede blod_1 Nybegynder
28. december 2009 - 22:26 #14
Men hvordan får man den overhovedet startet?

Det er sådan set det største problem jeg har lige nu, hvor jeg kun får:
System.Net.HttpListenerException: Adgang nægtet
  ved System.Net.HttpListener.AddAll()
  ved System.Net.HttpListener.Start()
  ved httplistener_test.Form1..ctor() i C:\Users\Parx\Documents\Visual Studio 2008\Projects\httplistener test\httplistener test\Form1.cs:linje 22

som er "listener.Start();"

har prøvet forskellige iper som er tildelt maskinen som det skal køre på, og forskellige porte, hvor jeg er 100% sikker på at portene ikke er i brug af noget andet.
Avatar billede arne_v Ekspert
28. december 2009 - 23:29 #15
Følgende virker fint hos mig:

using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Net;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            HttpListener websrv = new HttpListener();
            websrv.Prefixes.Add("http://127.0.0.1:5051/");
            websrv.Start();
        }
    }
}
Avatar billede arne_v Ekspert
28. december 2009 - 23:29 #16
Hvilken windows kører du ?

Noget security sofwtare installeret ?
Avatar billede blod_1 Nybegynder
29. december 2009 - 00:11 #17
Med det du skrev, får jeg også samme fejl.

På denne har jeg Windows 7 x64 hvor den fejl kommer, den kommer også på mit mediecenter, og så har jeg 2 stk windows 2003 enterprice hvor jeg også får den fejl på...

Der er kun noget antivirus på begge windows 7 maskinerne, og så firewallen på de to 2003 maskiner...

Men selv om jeg ekstra laver en undtagelse for den fil i firewall, får jeg stadig den fejl.

Prøver at installere xp i en VM for at se om det også sker der...
Avatar billede blod_1 Nybegynder
29. december 2009 - 00:13 #18
Hvad Visual C# 2008 Express selv skriver er dette

>    WindowsFormsApplication1.exe!WindowsFormsApplication1.Form1.button1_Click(object sender = {Text = "button1"}, System.EventArgs e = {X = 14 Y = 11 Button = Left}) Line 24    C#
    [External Code]   
    WindowsFormsApplication1.exe!WindowsFormsApplication1.Program.Main() Line 18 + 0x28 bytes    C#
    [External Code]   

http://peecee.dk/uploads/122009/Udklip5.PNG
Avatar billede blod_1 Nybegynder
29. december 2009 - 00:15 #19
Stacktrace:

  ved System.Net.HttpListener.AddAll()
  ved System.Net.HttpListener.Start()
  ved WindowsFormsApplication1.Form1.button1_Click(Object sender, EventArgs e) i C:\Users\Parx\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs:linje 24
  ved System.Windows.Forms.Control.OnClick(EventArgs e)
  ved System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
  ved System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
  ved System.Windows.Forms.Control.WndProc(Message& m)
  ved System.Windows.Forms.ButtonBase.WndProc(Message& m)
  ved System.Windows.Forms.Button.WndProc(Message& m)
  ved System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
  ved System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
  ved System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
  ved System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
  ved System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
  ved System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
  ved WindowsFormsApplication1.Program.Main() i C:\Users\Parx\AppData\Local\Temporary Projects\WindowsFormsApplication1\Program.cs:linje 18
  ved System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
  ved Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
  ved System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
  ved System.Threading.ThreadHelper.ThreadStart()
Avatar billede arne_v Ekspert
29. december 2009 - 01:46 #20
Når ikke jeg kan genskabe problemet her, så kan jeg ikke rigtigt hjælpe.
Avatar billede blod_1 Nybegynder
29. december 2009 - 01:52 #21
:(

det må så betyde at det er en ustabil 'komponent' at bruge... Der sker det samme på alle fire maskiner, plus den VM med XP jeg lige fik op og køre...

har ingen ide om hvad der kan være galt, efter som den kun fortæller mig at adgang er nægtet, men ikke hvad adgangen faktisk er nægtet til...

Dog, hvis jeg åbner programmet to gange, så begge kører på samme tid, så skriver nummer to at recoursen allerede er i brug, så det må jo betyde at den åbner et eller andet, men så alligevel ikke...
Avatar billede arne_v Ekspert
29. december 2009 - 01:58 #22
Der er vel et par hundrede millioner Windows maskiner world wide som har den installeret og nogle titusinder af udviklere som har brugt den world wide. Uden problemer.
Avatar billede blod_1 Nybegynder
29. december 2009 - 02:01 #23
Et eller andet må der jo være galt med det, siden at jeg kan få en kode der virker, til ikke at virke på 4 forskellige maskiner, plus en VM som er spredt over 3 forskellige styre systemer...
Avatar billede Syska Mester
29. december 2009 - 02:06 #24
Hvad port bruger du blod_1 ? Kan du poste den kode du prøver ? Så jeg kan da også prøve det ... bare for at slå fast om du har ret eller det er dine maskine der måske alle har samme fejl.

mvh
Avatar billede blod_1 Nybegynder
29. december 2009 - 02:10 #25
De koder jeg har prøvet har jeg allerede postet, har også linket til en rar fil med alt i det lille test projekt jeg lavede. Både dem, og så det arne_v kan få til at virke, fejler alle på mine maskiner.

Af porte har jeg prøvet en masse tilfældigt fra ca 2000 op til ca 9000

Og hvis jeg sætter noget andet til at køre på den port, så virker det fint, så porten burde der ikke være noget galt med.
Avatar billede Syska Mester
29. december 2009 - 02:26 #26
Intet problem her ... står og venter på en connection.

Windows 7 Ultimate x64
Avatar billede blod_1 Nybegynder
29. december 2009 - 02:33 #27
Fatter jeg ikke, det er det samme jeg har... Og ingen af mine maskiner vil... Ikke engang en frisk install af XP uden noget som helt, hvor kun lige .net er blevet installeret...
Avatar billede blod_1 Nybegynder
29. december 2009 - 02:43 #28
Nu begynder det her at blive rigtig mærkeligt... Jeg har fået det til at fungere på mine Windows 2003 maskiner, når jeg deakiverer avast på min ene windows 7 maskine, så kan de starte den op uden fejl. Hvis jeg aktiverer det, så kommer der fejl igen.

Nu har jeg så bare fået et helt andet problem, når

HttpListener websrv = new HttpListener();
            websrv.Prefixes.Add("http://127.0.0.1:5051/");
            websrv.Start();

bliver aktiveret, så forsvinder formen... den kører stadig i oversigten, men vinduet er ikke længere synligt...

og det er med denne kode

using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Net;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            HttpListener websrv = new HttpListener();
            websrv.Prefixes.Add("http://127.0.0.1:5051/");
            websrv.Start();
        }
    }
}

som arne_v postede længere oppe... Det her er efterhånden et kæmpe mysterie... Kan slet ikke finde nogen logik i det som der sker...
Avatar billede Syska Mester
29. december 2009 - 02:46 #29
Jeg flyttede nu også lidt rundt på det ... og formen svarede ikke.

Arve_v sagde også i starten et sted tror jeg ... at det kunne være firewall/antivirus ...

Men i hvert fald har de lært noget af det ... :-)
Avatar billede blod_1 Nybegynder
29. december 2009 - 02:53 #30
Det mærkelige er så... At den antivirus jeg deaktiverer, ikke er på de maskiner som giver fejlene... Aktiverer jeg den på min maskine som jeg sidder ved nu, så holder den lille kode stump op med at fungere på min server, som så også er på samme netværk, men stadigmærkeligt at antivirus på denne kan ødelægge det på den anden?

Det næste er så hvordan man får den til at virke sammen med en form... Programmet der skal bruge det bruger det der sker på formen til en del imens det kører.
Avatar billede blod_1 Nybegynder
30. december 2009 - 00:53 #31
Status er så nu at den kan virke på mine windows 2003 maskiner, men at formen fryser når HttpListener bliver startet, dog fungerer den udemærket, kun formen som ikke svarer.

Har forsøgt at lave noget med hvor den lavede en anden tråd til den og hvor den kører i en løkke, samme resultat hver gang. Kan det virkeligt passe at så længe den kører, så kan man ikke lave andet?
Avatar billede Syska Mester
30. december 2009 - 01:01 #32
Du skal starte din HttpListener i en ny tråd ... ellers vil din form "fryse" ...

Hvordan gør du lige nu ?
Avatar billede arne_v Ekspert
30. december 2009 - 01:03 #33
For en ca. 20 indlæg siden var det et loop i formens constructor.
Avatar billede Syska Mester
30. december 2009 - 01:19 #34
Ja, og ca. 5 indlæg siden var det som et enkelt run på højs sandsynlig et button click.

Spændt på hvor det er nu :-)

// ouT
Avatar billede blod_1 Nybegynder
20. januar 2010 - 15:44 #35
Sådan, langt om længe!

I må undskylde det meget sene svar, men endte med at blive godt og grundigt træt af det hele, men nu har jeg fået kigget på det, og fundet løsningen også.

Problemet med Windows 7 er at det kræver specielle rettigheder for at få lov til at starte en http listener, hvor de andre er ligeglade. Samtidig med det så var der så også noget antivirus som mente at det var noget farligt noget.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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