Wie return HTTPResponse von ASMX-web-service-consumer-web-Seite
Arbeite ich an einem ASMX-web-service; versuchen Sie eine Methode erstellen, wird download ein Dokument von einem server und zeigen Sie das Dokument im browser (der Aufruf .aspx-web-Seite). Mein service baut ohne Fehler aber ich bekomme die folgende Fehlermeldung, wenn ich versuche auf "Add Web Reference" in meinem Proxy-Klasse-Projekt:
System.Web.HttpResponse kann nicht serialisiert werden, weil Sie nicht über einen parameterlosen Konstruktor.
Hier ist ein Ausschnitt von dem code .ASMX-Datei:
public class FileService : System.Web.Services.WebService
{
[WebMethod]
public void DownloadDocument(string URI, HttpResponse httpResponse)
{
int DownloadChunkSize = (int)Properties.Settings.Default.DownloadChunkSize;
//some more code here....
using (httpResponse.OutputStream)
{
//more code here...
}
}
}
Ich sehe, ich bin verwirrt, wie den Versand wieder ein HttpResponse-von-a-web-service an den anfordernden web-Seite. Könnte jemand bitte geben Sie mir einen Tipp, wie dies zu tun? Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie suchen Sie in web-Handler (.ashx). Sie sind perfekt für das, was Sie versuchen zu erreichen.
Beispiel:
UPDATE:
Ein ashx-handler ist eigentlich ein Ersatz für aspx. Im Grunde, es hat keine Benutzeroberfläche, aber immer noch Prozesse, die get /post-Anfragen wie eine aspx-Seite tut. Der Punkt ist, um den Aufwand zu verringern, erzeugt durch eine regelmäßige aspx-Seite, wenn alles, was Sie tun müssen, ist, wieder einige einfache Inhalte (wie eine Datei,...) oder führen Sie eine schnelle Aktion.
Den IRequiresSessionState-Schnittstelle können Sie das SESSION-Objekt wie jede andere Seite in Ihrer Website haben können. Wenn Sie nicht brauchen, dann lassen Sie es aus.
Diese Website hat einen interessanten Spaziergang durch, wie Sie einen erstellen. Ignorieren Sie Schritt 4, wie Sie wahrscheinlich nicht interessieren.
Angenommen, Sie haben eine normale Seite (aspx), die einen link zum Dokument: Der link in der aspx-Datei würde eigentlich direkt auf Ihre ashx-handler. zum Beispiel:
Dann den code in die Methode ProcessRequest der ashx-handler würde alles tun, was fordert es benötigt (wie sprechen Sie mit Ihren DLL), um das Dokument zu suchen, dann übertragen Sie Sie an den browser zurück durch den Kontext.Antwort.BinaryWrite-Methode aufrufen.
Nicht wie standard ASMX web services arbeiten. Wenn Sie wollen, um Ihren eigenen handler, oder sogar eine ASPX-Seite zu liefern, doc, Sie sind in Ordnung, aber die standard-ASMX-web-service-Methode, dies zu tun ist, um tatsächlich die Rückkehr der bits des Dokuments als eine kodierte blob.
Wenn Sie möchten, Rollen Sie Ihre eigenen, sollten Sie diese Artikel:
http://msdn.microsoft.com/en-us/magazine/cc163879.aspx
Web smethod (von asmx) gibt ein Objekt, das serialisiert werden kann.
Müssen Sie erstellen Ihre Methode wie:
[WbeMethod]
public byte[] DownloadDocument(string URI)
Oder wenn der Inhalt ist text - return string.