webForumDet fria alternativet

WebRequest fungerar inte (endast med fiddler!?)

.NET

9 svar · 807 visningar · startad av Claysson

Medlem sedan jan. 200454 inlägg
Frågan#1

Jag skickar en WebRequest med "POST" från en aspx-sida till ett windowsprogram.

var request = WebRequest.Create("http://localhost:49999");
osv..

Detta fungerar lokalt som med ovan adress, skickar jag detta mot ett IP mot en annan dator fungerar inte detta. Men kör jag igång Fiddler och analyserar trafiken så fungerar det plötsligt genom att requesten går via Fiddlers proxy.

Är det någon som har stött på detta, eller har tips på ideér.

Tack

Medlem sedan feb. 20041 816 inlägg
#2

Utan mer kod är det rätt svårt att se vad som kan vara fel.
Vad är det som inte funkar förresten? Får du nåt svar eller kastas det ett exception?

Medlem sedan jan. 200454 inlägg
#3

servern jag skickar POST:en till får bara headern antar jag, själva bodyn finns inte med i requesten hit. Så servern kan inte processa min request på ett korrekt sätt, men själva responsen servern skickar tillbaka får jag tillbaka. Denna responsen blir givetvis inte den response jag hade tänkt mig då servern får en felaktigt request.

Jag får alltså inget exception.

Jag kan bifoga mer kod när jag sitter på korrekt dator imorgon.

Medlem sedan juni 20014 290 inlägg
#4

Proxyn måste göra någonting mera, kanske lägga på någon header, fixa till något som är felkodat ....

Har du kollat denna sidan och gjort som han beskriver när det gäller POST? http://www.west-wind.com/presentations/dotnetwebrequest/dotnetwebrequest.htm

Medlem sedan jan. 200454 inlägg
#5
string lcUrl = "http://XX.XX.XXX.XX";

            // *** Establish the request 

            HttpWebRequest loHttp = (HttpWebRequest)WebRequest.Create(lcUrl);

            string lcPostData = testdata;
            
            loHttp.Method = "POST";

            byte [] lbPostBuffer = System.Text.Encoding.GetEncoding(1252).GetBytes(lcPostData);

            loHttp.ContentLength = lbPostBuffer.Length;

            loHttp.Credentials = CredentialCache.DefaultCredentials;

            //loHttp.SendChunked = true;

            loHttp.ServicePoint.Expect100Continue = false;

            Stream loPostData = loHttp.GetRequestStream();

            loPostData.Write(lbPostBuffer, 0, lbPostBuffer.Length);

            loPostData.Close();

            HttpWebResponse loWebResponse = (HttpWebResponse)loHttp.GetResponse();

            Encoding enc = System.Text.Encoding.GetEncoding(1252);

            StreamReader loResponseStream = new StreamReader(loWebResponse.GetResponseStream(), enc);

            string lcHtml = loResponseStream.ReadToEnd();

            loWebResponse.Close();

            loResponseStream.Close();

Jag läste igenom sidan du skickade. Det känns som jag testat det mesta, men antagligen inte.

Har det med rättigheter att göra?

Medlem sedan juni 20014 290 inlägg
#6

Har du kört HttpUtility.UrlEncode() på testdata?

Är testdata rätt formaterad?

Medlem sedan jan. 200454 inlägg
#7

Jag har även angett: ContentType = "text/xml";

Jag har testat både med och utan urlEncode.

Medlem sedan jan. 200454 inlägg
#8

Ny ledtråd! Jag har sniffat trafiken och paketen som skickas med WireShark, och i det här programmet kan man då följa en TCP-ström.

När det blir fel ser jag detta:
När jag sniffar trafiken på min dator med WireShark så ser jag att request-header skickas först, sedan kommer response-header och response-body, och slutligen request-bodyn.

När det blir korrekt, t.ex. när jag användre fiddler:
Då skickas Request-body och request-header och sedan kommer response-header och response-body, precis så som det bör vara.

Någon som förstår sig på varför det kan bli såhär?

Medlem sedan feb. 20041 816 inlägg
#9

Jag kan inte se några fel i koden.

Ehm, då verkar det ju mysko. I koden anges det att allt skall skickas på en gång så ens headers borde inte skickas först och bodyn efter det.

Medlem sedan jan. 200454 inlägg
#10

Hmm, felet låg på serversidan! Det trodde jag inte då det fungerade bra med ett serverprogram samt skicka en webrequest från Fiddler.

257 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)