Wie lade ich eine Datei aus einem WCF-Service-Stream herunter?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Wie lade ich eine Datei aus einem WCF-Service-Stream herunter?

Post by Anonymous »

Ich versuche, eine CSV-Datei remote herunterzuladen, indem ich einen WCF-Dienst mit jQuery aufrufe. Da sich die Datei nicht wirklich auf dem Server befindet, habe ich versucht, sie als Stream zurückzugeben. Da ich den Content-Disposition-Header verwende, sollte der Browser des Clients automatisch mit dem Herunterladen der Datei mit einem bestimmten Dateinamen beginnen.

Meine WCF-Dienstmethode in C#:

Code: Select all

[OperationContract()]
public Stream GetCsvFile(int id)
{
string s = ...;
WebOperationContext.Current.OutgoingResponse.ContentType = "text/csv";
WebOperationContext.Current.OutgoingResponse.Headers["Content-Disposition"] = "attachment; filename=\"file1.csv\"";
return GenerateStreamFromString(s);
}

public Stream GenerateStreamFromString(string s)
{
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}
Meine jQuery-AJAX-Anfrage:

Code: Select all

$.ajax({
type: "POST",
url: serviceUrl,
cache: false,
data: data,
dataType: "text",
contentType: "application/json; charset=utf-8",
success: function() {
// TODO...
}
});
Diese Anfrage wurde erfolgreich abgeschlossen! Und ich kann die korrekten CSV-Daten in der Antwort sehen. Es wird jedoch keine tatsächliche „Datei-Download“-Aktion im Browser initiiert (wird derzeit auf Chrome getestet) und „file1.csv“ wird nicht auf der Festplatte des Clients gespeichert.

In einer alten VB.NET-Version derselben Anwendung funktionierte Folgendes in einem .aspx-Seiten-Code-Behind:

Code: Select all

Response.Clear()
Response.ContentType = "text/csv"
Response.AddHeader("content-disposition", "attachment; filename="file1.csv")
Response.Write(s)
Response.End()
Dies würde automatisch einen Dateidownload von „file1.csv“ initiieren. Es würde überhaupt kein „Speichern unter“-Dialog angezeigt, die Datei würde einfach sofort heruntergeladen. Es war ziemlich cool.

Wie kommt es also, dass es nicht funktioniert, wenn ich versuche, einen WCF-Dienst mit jQuery aufzurufen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post