Avatar billede mrslayer Nybegynder
30. marts 2006 - 14:49 Der er 20 kommentarer og
1 løsning

C# på PocketPC WebRequest

Hejsa.

Jeg har sådan en Windows Mobile 2003 SE dims, udover det har jeg en tomcat server stående som tager imod data via post (uden nogen form) og så sender dem tilbage. Min mobiltelefon kan jeg fint få til at snakke med tomcat serveren som jeg gerne vil(kodet i J2ME), men desværre kniber det noget med PDA'en.

Som situationen er nu kan jeg godt kontakte Tomcat serveren og modtage noget vilkårlig tekst data, problemet er når jeg prøver at sende data. Min kode ser pt sådan her ud:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;

namespace HulIgennem
{
    class Connect
    {
        public static string getSvar()
        {
            HttpWebRequest wrq = (HttpWebRequest)WebRequest.Create("http://172.18.42.71:8080/midp/pda");
            wrq.Method = "POST";
            wrq.Timeout = 2000;
                       
            byte[] data = Encoding.ASCII.GetBytes("HUL IGENNEM?");
            wrq.ContentLength = data.Length;
           
            WebResponse wr = wrq.GetResponse();
            StreamWriter writer = new StreamWriter(wrq.GetRequestStream());
            writer.Write(data);
            writer.Close();
            StreamReader sr = new StreamReader(wr.GetResponseStream(), Encoding.ASCII);
            string temp = sr.ReadToEnd();
            wr.Close();
            sr.Close();
           
            return (temp);
        } 
    }

   
}
Avatar billede mrslayer Nybegynder
30. marts 2006 - 14:50 #1
Hov ja der fik jeg trykket post lidt for hurtigt.

Så hvis der er nogle der kan fortælle hvordan jeg opnår at kunne sende data til min Tomcat server via den PocketPC vil det være dejligt.
Avatar billede dr_chaos Nybegynder
30. marts 2006 - 14:52 #2
Kan du ikke lave en webservice til at modtage og hente data ?
Det vil være den normale måde.
Avatar billede mrslayer Nybegynder
30. marts 2006 - 14:54 #3
Det som det her skal ende op med er at PDA helt anonymt sender data afsted til en tomcat server, binært, og det kan en webservice også klare?
Når jeg skriver anonymt så mener jeg at brugeren faktisk ikke skal gøre noget for at den gøre det, blot startr programmet første gang han tænder sin pda.
Avatar billede dr_chaos Nybegynder
30. marts 2006 - 14:59 #4
ja det bør man kunne.
Jeg ved du sagtens kan sende binært.
Du kan sende data i alle nødvendige formater også som en fil hvis det skulle være.
Avatar billede dr_chaos Nybegynder
30. marts 2006 - 15:00 #5
du kan evt prøve at kigge her:
http://beehive.apache.org/docs/1.0m1/wsm/tutorial_wsm.html
hvordan du sætter webservice op på tomcat.
Avatar billede mrslayer Nybegynder
30. marts 2006 - 15:06 #6
Nå jeg læser lidt mere, webservicen er hvertfald noteret som en metode det kan gøres på. Skal der så også oprettes en webservice på PDA'en`, dvs er der et c# API til det?
Avatar billede arne_v Ekspert
30. marts 2006 - 15:06 #7
1)

jeg ville kalde

writer.Close();

inden

wrq.GetResponse();
Avatar billede arne_v Ekspert
30. marts 2006 - 15:07 #8
2)

til Tomcat vil jeg nok anbefale rå Axis toolkit
(Beehive er bare en overbygning som bruger JDK 1.5.0 annotations)

se evt. http://www.eksperten.dk/artikler/159
Avatar billede arne_v Ekspert
30. marts 2006 - 15:08 #9
det er helt uproblematisk at kalde en java web service fra C#

se evt. http://www.eksperten.dk/artikler/516
Avatar billede dr_chaos Nybegynder
30. marts 2006 - 15:16 #10
kan ikke sige det meget bedre en arne gør med sine artikler :)

Fordelen ved webservicen er at den stortset kan kaldes fra alle sprog.
Avatar billede mrslayer Nybegynder
30. marts 2006 - 15:19 #11
writer.close skal helt klart kaldes inden, dum fejl. Nu får jeg så en
ProtocolViolation.Exception ved HttpWriteStream.Write ved StreamWriter.Flush ved StreamWriter.Dispose ved StreamWriter.Close.

Det er da bedre end før hvor det bare en ubeskrevet exception som den blev kaldt.

Men nogen ide om hvad der går galt der?
Avatar billede arne_v Ekspert
30. marts 2006 - 15:51 #12
lyder som der mangler en HTTP header

ContentType var et bud

proev med

wrq.ContentType = "application/x-www-form-urlencoded";
Avatar billede mrslayer Nybegynder
30. marts 2006 - 16:37 #13
Tilføjer jeg ContentType så får jeg samme fejl og andre gange en: WebException ved WebRequest, dvs der har den så klaret at komme forbi selve write ledet. Googler giver mig stadigvæk ikke meget, men jeg forventer nu stadigvæk at det kan lade sig gøre på den her måde.
Avatar billede arne_v Ekspert
30. marts 2006 - 18:09 #14
ja

det her eksempel er testet og virker:

using System;
using System.IO;
using System.Net;

class MainClass
{
    public static void Main(string[] args)
    {
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://arne/htbin/tell2");
        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        StreamWriter post = new StreamWriter(req.GetRequestStream());
        post.Write("field1=value1&field2=value2");
        post.Close();
        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
        Stream stm = resp.GetResponseStream();
        int c;
        string res = "";
        while((c = stm.ReadByte()) >= 0) {
            res += (char)c;
        }
        stm.Close();
        resp.Close();
        Console.WriteLine(res);
    }
}
Avatar billede arne_v Ekspert
30. marts 2006 - 18:14 #15
hvis det ikke er form data skal det nok bare vaere:

req.ContentType = "text/plain";

eller

req.ContentType = "application/octet-stream";
Avatar billede arne_v Ekspert
30. marts 2006 - 18:19 #16
et andet trick

proev og lav dette kald aller foerst i dit program:

ServicePointManager.Expect100Continue = false;
Avatar billede mrslayer Nybegynder
31. marts 2006 - 11:46 #17
Fik løst problemet, istedet for at lave det til en PDA lavede jeg det først til PC og der fik jeg en fejl i selve StreamWriteren, og udfra den fejl kunne jeg se at jeg skulle sætte AllowWriteStreamBuffering til true, og da det så var gjort virkede det hele.

Dejligt dejligt. Men arne_v kan du ikke lige oprette et svar da din hjælp stadigvæk (som før) har været ganske god og lærerig.
Avatar billede arne_v Ekspert
31. marts 2006 - 13:58 #18
.
Avatar billede arne_v Ekspert
22. april 2006 - 21:28 #19
så mangler du bare at acceptere
Avatar billede mrslayer Nybegynder
24. april 2006 - 09:18 #20
Ja det har jeg gjort 3 gange, men åbenbart sker der ikke så meget når jeg trykker accepter
Avatar billede mrslayer Nybegynder
24. april 2006 - 09:18 #21
hah 4 gange var så lykkens gang, gad vide hvad jeg gjorde forkert de andre gange.
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