2

Ich entwickle einen WCF-Web-Service auf WebHttpBinding, Client-Anwendung ruft diesen WCF-Webservice bei Bedarf (HTTP POST) oder über Scheduler Windows-Dienst (derzeit Quartz.net).Lange Zeit läuft WCF 504 GATEWAY_TIMEOUT Fehler

Bei jedem Anruf wird eine Liste von Aufgaben ausgeführt, die 10-30 Minuten dauern können. Ich bekomme 504 Gateway_Timeout Fehler nach 1 Minute. Ich habe versucht, das Limit im WCF-Webservice zu erhöhen, aber immer noch den Fehler zu bekommen.

<webHttpBinding> 
    <binding name="webHttpBindingWithJsonP" closeTimeout="00:30:00" openTimeout="00:30:00" receiveTimeout="00:30:00" sendTimeout="00:30:00" maxReceivedMessageSize="50000000" maxBufferSize="50000000" maxBufferPoolSize="50000000" crossDomainScriptAccessEnabled="true"/> 
    </webHttpBinding> 


<httpRuntime executionTimeout="1800" targetFramework="4.0"/> 

Unabhängig von dem Fehler wird die Aufgabe immer abgeschlossen. Ich bin mir nicht sicher, ob WCF noch läuft, wenn die Web-Anfrage abgelaufen ist? Wenn eine Aufgabe weniger Zeit benötigt, zum Beispiel eine halbe Minute, dann gibt sie ein gültiges Ergebnis zurück.

Ich habe versucht, Trace-Protokolle mit allen switchvalue und TraceViewer verwenden, um die Ausgabe zu überwachen, keine Fehler gefunden wurden.

Meine Fragen sollten WCF-Service als WebHttpBinding-Service entworfen werden, oder sollte ich es als einen anderen Typ entwerfen?

+1

Warum es nicht als ein einseitiger Anruf vom Client einrichten und dann den Client in regelmäßigen Abständen den Dienst abfragen, um einen Status zu erhalten. – Tim

+0

@Tim, ja in der Client-App, verwende ich Task.Run(), um eine Fire & Forget API-Aufruf zu implementieren, nur wenn ich die WCF in Chrome Postman testen, gibt es einen Fehler 504. Ich möchte sicherstellen, dass der Prozess in WCF noch läuft, nachdem 504 zurückgegeben wurde. –

Antwort

1

Haben Sie darüber nachgedacht, eine Statusseite als Teil Ihres ersten Anrufs bereitzustellen und den Benutzer dann (wiederholt) auf die Statusseite zu überprüfen, um zu überprüfen, ob die Aufgabe abgeschlossen ist?

Dies wird sicherstellen, dass keine Zeitüberschreitung auftritt, da die Verbindung kurzlebig ist.

+0

In der Client-App verwende ich Task.Run(), um einen Fire & Forget-API-Aufruf zu implementieren, den Jobstatus als ausgeführt zu protokollieren und ajax den Abschluss alle x Sekunden zu überprüfen, wenn ich WCF in Chrome Postman teste ein 504 Fehler. Ich möchte sicherstellen, dass der Prozess in WCF noch ausgeführt wird, nachdem 504 an die Clientseite zurückgegeben wurde. –

+0

Sie müssen eine Möglichkeit bereitstellen, um auf einem anderen Endpunkt zu prüfen, ob die Vervollständigung durchgeführt wurde oder nicht. Das Halten der WCF-Verbindung, die wie Sie geöffnet ist, führt zu diesen Arten von Fehlern. Wenn Sie in irgendeiner Weise kommunizieren, könnte es gemacht werden, um zu arbeiten, aber nur zehn Minuten warten wird schwierig sein, da es eine lange Zeit ist, eine Verbindung offen zu haben, ohne Daten zu übertragen. – Guvante

+0

das ist genau das, was ich tue haben unterschiedliche wcf Status zu überprüfen, ist meine Sorge die erste Aufgabe Implementierung wcf kann nicht halten Verbindung für zu lange, wie kann ich sicherstellen, dass es immer ausgeführt und abgeschlossen? Es ist mir egal, eine Einbahnstraße und vergessen Sie das Ergebnis, haben Sie den Status wcf später überprüfen. –