2009-02-27 10 views
3

Ich bin meine Füße nass mit Programmierung und mein Selbstlernen bringt mich zu dieser Frage. Ich habe über Designmuster gelesen und wollte wissen, was eine gute Empfehlung dafür wäre.Design-Muster für Windows-Service - C#

Meine Testanwendung sendet eine Nachricht an MSMQ. Ich möchte einen Windows-Dienst schreiben, der auf diesen MSMQ hört, und für jede Nachricht, die er erhält, möchte ich, dass er einen einfachen Datenbankeinsatz ausführt.

ich in diesem Artikel sah link text

, die mir einige Informationen gab ich brauchte. In dem Beispiel könnte ich die meiste meiner Arbeit innerhalb

private static void MyReceiveCompleted(Object source, 
     ReceiveCompletedEventArgs asyncResult) 
    { 
     // Connect to the queue. 
     MessageQueue mq = (MessageQueue)source; 

     // End the asynchronous Receive operation. 
     Message m = mq.EndReceive(asyncResult.AsyncResult); 

     // Display message information on the screen. 
     Console.WriteLine("Message: " + (string)m.Body); 

     // Restart the asynchronous Receive operation. 
     mq.BeginReceive(); 

     return; 
    } 

tun Aber gibt es ein bestimmtes Muster, das ein geeigneter Kandidat ist? Ich gehe davon aus, dass es das "Befehls" -Muster sein könnte, aber ich bin mir nicht sicher, ob dies das beste Muster ist. Irgendwelche Ideen oder Gedanken, die mir helfen, die Muster besser zu verstehen.

Bücher las ich auf Muster: - (? Sp) Head First Design-Muster Ich weiß, gemischte Kritiken auf diesen eine gebrauchte Kopie von Entwurfsmustern durch Bande von vier bestellten

Antwort

1

Wenn Sie WCF in Ihrem System verwenden können, überprüfen Sie die netMsmqBinding oder MsmqIntegrationBinding. Es ist eigentlich nicht schwer zu installieren, es gibt viele Tutorials.

Mit WCF müssen Sie sich nicht mit System.Messaging beschäftigen.

In meiner Firma hosten wir viele MSMQ-Dienste in Windows-Diensten. Sehen Sie sich die ServiceHost-Klasse in WCF an.

+0

Andy, ich kann WCF benutzen und werde auschecken. Irgendwelche empfohlenen Blogs für netMsmqBinding oder msmqIntegrationBinding? –

+0

http://blogs.msdn.com/drnick/default.aspx - das ist einer der besten WCF-Blogs, auf die ich gestoßen bin. Hier sind einige alte, aber gute Tutorial-Videos: http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2006/09/13/8875.aspx –

5

Dies steht nicht in direktem Zusammenhang mit Ihrer Frage, aber ein wichtiges Entwurfsmuster bei der Entwicklung von Diensten jeglicher Art (Webdienste, Windows-Dienste usw.) besteht darin, Ihre Funktionen vom Diensthost zu trennen.

Das heißt, haben Sie eine Klasse, die tatsächlich die Arbeit ausführt. Und einen Dienst haben, der die Klasse anruft.

Auf diese Weise können Sie den Dienst einfach auf mehreren Hosts erneut hosten und die Funktionalität auf einfache Weise über Konsolenanwendungen, Winforms-Apps oder Komponententests testen.

+0

Ich stimme dem zu, bin mir aber nicht sicher, wie man Ausnahmen verwaltet dieses Model. Behalten Sie alles in der Klasse (machen die Arbeit) und geben Sie einen Erfolg/Fehler an den Host zurück, oder lassen Sie kritische Ausnahmen zum Host übergehen, so dass Sie Dinge wie pausieren oder den Dienst anhalten können? –

+0

Nur kritische Dinge, die den Dienst wirklich töten sollten, würden durchgebrannt werden. Alles andere ist in der Klasse gekapselt. Ich könnte sogar einen Terminplan und dergleichen in die Klasse aufnehmen, um den Service zu einem Boot-Strapper zu machen. –