Frage

Szenario:. Ein WCF-Dienst eine XDocument von Clients empfängt, verarbeitet sie und fügt eine Zeile in einer MS SQL-Tabelle

Mehrere Clients können den WCF-Dienst gleichzeitig anrufen. Der Aufruf in der Regel nicht lange dauern (ein paar Sekunden).

Jetzt brauche ich etwas die SQL-Tabelle abzufragen und eine weitere Reihe von Prozessen in einer asynchronen Art und Weise ausgeführt werden. Der zweite Prozess muss nicht allen Rückruf noch an die WCF in irgendeiner Weise im Zusammenhang. Es muss nur die Tabelle lesen und eine Reihe von Methoden und vielleicht einen Web-Service-Aufruf durchführt (wenn es Aufzeichnungen natürlich sind), aber das ist alles. Die WCF-Service-Clients den oben genannten Serviceaufwendig haben keine Ahnung davon und kümmern sich nicht um sie.

Ich habe gelesen, über diese Frage in Stackoverflow und ich weiß auch, dass ein Windows-Dienst wäre ideal, aber der WCF-Dienst wird auf einem Shared Hosting (discountasp oder ähnliches) und daher die Installation einen Windows Service wird keine Option gehostet wird (wie Soweit ich weiß).

Da die Architektur festgelegt ist (IE: Ich kann die Tabelle ändern, ist es von einem Legacy-Format kommt, noch den Mechanismus des WCF-Dienstes ändern)?, Was Ihr Vorschlag würde abfragen / Prozess dieser Tabelle

Ich würde sagen, ich brauche es alle 10 Minuten zu überprüfen oder so. Es muss nicht sofort sein.

Danke.

War es hilfreich?

Lösung

Cheat. Setzen Sie dieses Verfahren als eine anderen WCF-Dienst und Feuer einen Go-Befehls aus einer Box unter Kontrolle zu einem bestimmten Zeitpunkt.

Während Sie Hintergrund-Threads in WCF anwerfen können, oder verwenden Sie Cache-Ablauf als armer Scheduler des Menschen diejenigen stoppen, wenn Ihr app-Pool recycelt, bis der nächste Hit auf Ihrer Website und der App-Pool dreht sie wieder. Mindestens Brennen die Anforderung von einer Maschine, die Sie steuern bedeutet, dass Sie den App-Pool wissen kommen wieder bis alle 10 Minuten oder so, weil Sie eine Anfrage in seine Richtung geschickt hat.

Andere Tipps

Eine Web-Anwendung ist überhaupt nicht geeignet, etwas in einem festen Abstand zu laufen. Wenn es in den kommenden keine Anforderungen sind, gibt es keinen Code in der Anwendung ausgeführt wird, und wenn die Anwendung eine Zeit lang inaktiv ist, kann die IIS entscheiden, es vollständig herunterzufahren, bis die nächste Anforderung kommt.

Für einige Anwendungen ist es nicht wichtig ist, dass etwas in einem bestimmten Intervall ausgeführt wird, nur, dass es vor kurzem ausgeführt wurde. Wenn das der Fall für Ihre Anwendung dann könnte man nur verfolgen, wenn die Tabelle zuletzt abgefragt wurde, und für jede Anforderung zu überprüfen, ob genügend Zeit vergangen ist für die Tabelle wieder abgerufen wird.

Wenn Sie Zugriff haben, die Datenbank zu verwalten, gibt es einen Scheduler in SQL Server. Es kann Abfragen, gespeicherte Prozeduren ausführen und sogar Prozesse gestartet werden, wenn Sie über die Berechtigung (die auf einem Shared-Hosting sehr unwahrscheinlich ist, obwohl).

Wenn Sie den Code auf einem bestimmten Intervall, und Sie können nicht auf den Server zugreifen, es zu planen oder als Dienst ausgeführt wird, oder können die SQL Server-Planer nicht verwenden, es ist einfach nicht machbar.

Machen Sie Anwendungspool „immer aktiv“ und tun, was Sie mit Ihren Themen möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top