2017-12-15 6 views
0

Ich arbeite an einer Geschäftsanwendung, die mit ASP.NET (C#) & SQL Server 2000 entwickelt wurde. Ich möchte einen Mechanismus zur automatischen Übertragung einiger Daten aus meiner SQL Server-Datenbank zu entwickeln eine Sybase-Datenbank alle 5 Minuten.ASP.NET Thread vs Windows-Dienst

Nach meinem derzeitigen Kenntnisstand gibt es zwei Ansätze, um dies zu erreichen.

  1. Verwenden Timer einen Thread in meiner ASP.NET-Anwendung zu starten, die Daten von SQL Server & Schreiben auf Sybase liest.

  2. Entwickeln Sie einen Windows-Dienst, der Daten von SQL Server liest & in Sybase schreiben.

Also meine Fragen sind:

  1. Welche Option ist am besten?
  2. Was sind die Vorteile & Nachteile jeder Option?
  3. Gibt es einen anderen Ansatz für diese Datenübertragung?
+0

ASP.Net ist eine sehr schlechte Wahl für geplante Aufgaben. Ein SQL-Job könnte dies möglicherweise tun. Die Frage ist zu breit für spezifische Antworten. – Crowcoder

+0

Wenn Sie Threads in Ihrer ASP.NET-Site manuell starten, stürzt Ihre gesamte Site ab, wenn einer dieser Threads eine nicht behandelte Ausnahme hat. ASP.NET ist eine schreckliche Wahl für diese Art von Sache. – mason

+0

Wie ist es möglich, Daten mit SQL Agent-Job von SQL Server-Datenbank in Sybase-Datenbank zu übertragen? – Somi

Antwort

1

Ich würde mit einem Windows-Dienst für diese gehen. ASP.NET ist keine gute Lösung für diese Art von Aufgabe — schließlich, auch wenn es die Daten nicht sendet. Wenn Sie nicht die API Task in Betracht ziehen und die ASP.NET-Webanwendung asynchron dafür programmieren, werden Sie Fehler machen. Es ist auch nicht sicher, ob Ihre Umgebung alle modernen Funktionen (wie die API Task oder die Jobs im SQL Server mit allen Funktionen und Diensten) unterstützt. Aus diesem Grund wäre ein nativer Service der perfekte Weg.

private async Task saveData() { 
    // Copy the data 

    // Wait for 5 minutes "asynchronously" 
    Task.Delay(5 * 60 * 1000); // 5 minutes 
} 

Schließlich durchlaufen gerade darüber, diese while(true) vielleicht für Sie tun würde. In den meisten Fällen schießt du jedoch nur deinen eigenen Fuß.

Ich würde empfehlen, Windows-Dienst verwenden oder über

  • Managed
  • Timer basiert
  • Asynchronous

... Service, die alle n Minuten eine Aufgabe ausführt.

Ansonsten würde ich empfehlen, den SQL Server selbst zu betrachten, um die Arbeit für Sie zu erledigen. Hier ist eine andere Antwort, die zeigt, wie Sie dies tun können: Execute stored procedure from a Trigger after a time delay; Erstellen Sie die Jobs im SQL-Agent-Job. https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job

+0

Vielen Dank Afzaal für Ihre Antwort. Sie haben SQL Agent-Jobs in Ihrer Antwort erwähnt.Ist es möglich, Daten mit SQL Agent Job von einer Datenbank in SQL SERVER zu einer Datenbank in SYBASE zu übertragen? Beide sind zwei verschiedene Datenbank-Management-Systeme. Wenn ich meine beiden Datenbanken (sowohl Quelle als auch Ziel) in demselben DBMS hätte, könnte ich den SQL Agent Job verwenden. Aber kann es für verschiedene DBMS funktionieren? Bitte erkläre. – Somi

+0

@Somi, nein, du hast recht und ich erwähnte das nur für Trigger. Wie auch immer, es gibt einen anderen Thread, der darüber spricht; https://dba.stackexchange.com/questions/114634/how-to-transfer-data-from-sybase-to-sql-server-database, es ist umgekehrt, die Sybase-Datenbank nach SQL Server zu importieren - Sie können die Dinge ein wenig invertieren. :-) –