Entwickler-Ecke

Verteilte Systeme - WebService - Dateien übertragen


UGrohne - Mo 18.06.07 11:15
Titel: WebService - Dateien übertragen
Hallo, eine recht kurze Frage:

Wie schaffe ich es, über einen WebService Dateien zu übertragen? Im Moment weiß ich noch nicht, wie groß sie sein werden. Einen Stream kann ich ja nicht einfach rüberschicken *g*.


UGrohne - Mo 18.06.07 11:30

OK, habe es doch selbst hinbekommen, nachdem ich aufgehört habe, mit Streams herumzuprobieren:

Die Service-Prozedur sieht einfach so aus:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
        [WebMethod]
        public byte[] GetFile(string filename)
        {
            
            if (File.Exists(filename))
            {
                FileStream stream = new FileStream(filename, FileMode.Open);
                byte[] result = new byte[(int) stream.Length];
                stream.Read(result, 0, (int) stream.Length);
                return result;
            }
            return null;
        }

In der WinApp referenziert man dann einfach den WebService und holt sich die Datei mit folgendem Code:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
        private void button1_Click(object sender, EventArgs e)
        {
            localhost.Service1 service = new WindowsApplication1.localhost.Service1();
            FileStream stream = new FileStream(textBox2.Text, FileMode.CreateNew);
            byte[] data = service.GetFile(textBox1.Text);
            stream.Write(data, 0, data.Length);
            stream.Close();
        }

Ist zwar noch nicht perfekt (Statusbalken sollte noch hinzugefügt werden), aber funktioniert grundsätzlich mal.


lemmi68 - So 08.07.07 22:19
Titel: Mal eine frage dazu
Hallo UGrohne,

wenn ich einen WebService unter Tomcat und Apache in Java habe, dann gibt es doch dann die Möglichkeit mit dem SoapAttachment. Wenn ich jetzt einen WebService Client in C# machen möchte, wie geht das dann? Ich habe das Problem das beim Import des WSDL's. Da wird der Datentyp immer angemeckert. Wie löse ich das in C# für den Client? Und gibt es so eine Funktion auch auf Serverseite unter Windows? Das müsste doch auch im SOAP definiert sein oder?

Also einen C# Client für diesen WebService:

https://ws01.direktbrief.de/direktresult/DirektresultWS.jws?wsdl



Gruß,

Holger


UGrohne - Mo 09.07.07 10:00

Es sieht so aus, als ob der Typ http://xml.apache.org/xml-soap:DataHandler von .NET nicht unterstützt wird. Ich hab dazu auch im Netz was gefunden, dort wird empfohlen beim Java-Service eine Base64-Kodierung zu verwenden. Ich hab aber keine Ahnung, wie das dort dann aussehen könnte. Auf jeden Fall musst Du wohl den Service selbst anpassen, damit Du in .NET einen Client schreiben kannst.