2009-06-13 10 views
0

Ich habe zwei getrennte Projekte, von denen einer einen Windows-Dienst mit einem anderen eine Referenz hat.Wie interagieren Windows Service und ASP.NET MVC-Projekt?

Ich möchte meinen Dienst eine Methode aus dem referenzierten Projekt nennen, etwa wie folgt:

protected override void OnStart(string[] args) { 
    MessageSystem msg_system = new MessageSystem(); 

    IQueryable<MensagemGrupo> mensagens = 
     msg_system.GetScheduledMensagensGrupo(); 

    foreach (var msg in mensagens) { 
     msg_system.ConfirmaEnvio(DateTime.Now, msg.id); 
    } 

Der Code ich den Dienst werfen Aufruf bin:

public class MessageSystem { 
    private StorageModelDataContext db = new StorageModelDataContext(); 

    public IQueryable<MensagemGrupo> GetScheduledMensagensGrupo() { 
     IQueryable<MensagemGrupo> mensagens = db.GetMensagensGrupoAgendadas(); 

     return mensagens; 
    } 
} 

Ich erhalte ein System.NullReferenceException beginnend bei db.GetMensagensGrupoAgendadas(). Könnte es sein, weil db in einem Remote-Server ist?

Kann ich Methoden auf diese Weise vom Dienst anrufen?

PS: Der Dienst ist LocalSystem. Ich habe versucht, Netzwerkdienst, aber ich bekomme "Fehler 5: Zugriff verweigert" beim Starten des Dienstes.

+0

Sie möchten, dass der Dienst den ASP.NET MVC-Code aufruft? –

+0

Ja. Die Klasse MessageSystem ist ein Modell. – jvalente

+0

Haben Sie die Modellverbindungszeichenfolge in die app.config Ihres Diensts (wie in web.config) eingefügt? – jmservera

Antwort

0

ich dieses Problem mit Hilfe eines Web-Service in dem ASP.NET MVC-app gelöst, die den Dienst Fenster gedacht ausgeführt wird.

0

Möchten Sie dies über einen Webserver aufrufen, oder möchten Sie nur denselben Code ausführen, der sich in Ihrer ASP.NET MVC-App in Ihrem Dienst befindet?

Wenn es Letzteres ist und Sie einen Remote-Server aufrufen, der integrierte Authentifizierung verwendet, muss Ihr Dienst als ein auf dem Remote-Server gültiger Benutzer ausgeführt werden (dieser Benutzer benötigt die Berechtigung "Anmeldung als Dienst") kann den Dienst ausführen).

Wenn Sie es als Webdienst verwenden möchten (dh der ASP.NET MVC-Code wird auf einem Server ausgeführt, und Sie stellen Anfragen von Ihrem Dienst), sollten Sie der entsprechenden URL Ihres ASP eine Webreferenz hinzufügen. Die NET MVC-Anwendung macht keinen normalen Projektverweis auf das Projekt verfügbar. Weitere Informationen zum Erstellen des Webdiensts finden Sie unter Scott's post on mixing ASP.NET WebForms with ASP.NET MVC. Sehen Sie sich das Beispiel mit dem ASMX-Dienst an, und fügen Sie diesem ASMX dann eine Webreferenz (oder Dienstreferenz) aus Ihrem Serviceprojekt hinzu.

[bearbeiten die Web-Service-Option zu klären, nach jvalente Kommentar sehen]

+0

Service- und MVC-App befinden sich auf demselben Computer. Jetzt wurde mir klar, dass ich vom Modell nicht einmal eine Saite bekommen kann. Ich mache etwas falsch. Gibt es eine Besonderheit, um einen Service zu erhalten, der mit dem Modell "spricht"? – jvalente

1

Möchten Sie dies über einen Webserver aufrufen, oder möchten Sie nur denselben Code ausführen, der sich in Ihrer ASP.NET MVC-App in Ihrem Dienst befindet?

Wenn es Letzteres ist und Sie einen Remote-Server aufrufen, der integrierte Authentifizierung verwendet, muss Ihr Dienst als ein auf dem Remote-Server gültiger Benutzer ausgeführt werden (dieser Benutzer benötigt die Berechtigung "Anmeldung als Dienst") kann den Dienst ausführen).