Autor Beitrag
GeraldVonRiva
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19
Erhaltene Danke: 2



BeitragVerfasst: Di 05.07.16 12:34 
Hallo,

ich versuche gerade mit WCF einen Restful Webservice zu bauen. Dieser soll dem Client (Browser) ein Excelfile zurückliefern. Ich habe den Service so weit definiert das er ein Excelfile als Stream zurück sendet und der Browser auch einen Downloadlink öffnet. Jedoch ist die Exceldatei nach dem Download defekt.
Hat vllt jemanden einen Tipp, wieso die Datei defekt ankommt?

mfg

Gerald
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20448
Erhaltene Danke: 2263

Win 10
C# (VS 2019)
BeitragVerfasst: Di 05.07.16 13:45 
Hallo und :welcome:!

Vermutlich wird es leichter sein, Dir zu helfen, wenn Du auch noch relevanten Code zeigst.

Viele Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
GeraldVonRiva Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19
Erhaltene Danke: 2



BeitragVerfasst: Di 05.07.16 14:13 
Hallo

Also ich habe eine Interface Datei in der eine Get Anfrage an den Service verarbeitet wird.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
[ServiceContract]
public interface ISearch
{

    [OperationContract]
    [WebGet(ResponseFormat = WebMessageFormat.Json)]
    byte[] DownloadFile2();
}


Dort wird auf die Funktion in meiner Search.cs Klasse weitergeleitet.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
    public byte[] DownloadFile2()
    {
        if (WebOperationContext.Current == nullthrow new Exception("weboperationcontext not set");

        ExcelPackage exl = new ExcelPackage();

        ExcelWorksheet wsh = exl.Workbook.Worksheets.Add("tabelle1");

        wsh.Cells[11].Value = "company name";
        wsh.Cells[12].Value = "address";
        wsh.Cells[13].Value = "status";

        WebOperationContext.Current.OutgoingResponse.ContentType = "application/octet-stream";
        WebOperationContext.Current.OutgoingResponse.Headers.Add("content-disposition""inline; filename=tes.xlsx");

        return exl.GetAsByteArray();
    }


In dieser Methode wird die Exceldatei im Speicher erzeugt und als Byte Array zurückgesendet. Der Downloadlink funktioniert im Browser, aber leider kann die Exceldatei nicht geöffnet werden. Dort kommt dann der Fehler Datei beschädigt.

mfg
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4456
Erhaltene Danke: 919


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 05.07.16 14:21 
Entscheidend dürfte die Implementierung von ExcelPackage.GetAsByteArray() sein die wir nicht kennen. Liefert die was gültiges?
GeraldVonRiva Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19
Erhaltene Danke: 2



BeitragVerfasst: Di 05.07.16 14:32 
Ja die Funktion liefert einen Array mit Werten zurück, das wurde schon überprüft. Zur Erstellung der Exceldatei soll die Libary EPPlus genutzt werden, welche die Funktion ExcelPackage.GetAsByteArray() schon implementiert hat.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4456
Erhaltene Danke: 919


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 05.07.16 14:46 
Zitat:
Ja die Funktion liefert einen Array mit Werten zurück, das wurde schon überprüft.


Sicher? Ich habe mir mal die Implementierung von Save (also speichern in ein File) angesehen. Und die machen noch ein paar Vorbereitungsmaßnahmen bevor die dort selbst GetAsByteArray aufrufen.
Gefühlt müßtest du das auch tun.

Ich würde dir empfehlen einfach bevor du das Ding per Wcf über die Leitung jagst die auf auf dem Wcf Server auch in ein File zu schreiben und dann einfach mal ein File Compare zwichen den beiden Versionen zu machen. Das Diff sollte verdeutlichen wo das Problem liegt.
GeraldVonRiva Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19
Erhaltene Danke: 2



BeitragVerfasst: Mi 06.07.16 12:45 
Hallo,

bei nächster Gelegenheit werde ich mir mal die save Methode des Frameworks genauer anschauen. Das Thema hat sich durch eine Änderung der Projektanforderung erstmal erledigt.

Ich danke für die Tipps.

mfg

Gerald