2009-06-13 5 views
0

J'ai deux projets séparés étant l'un d'eux un service Windows ayant un autre a une référence.Comment faire interagir le service Windows et le projet ASP.NET MVC?

Je veux que mon service pour appeler une méthode à partir du projet référencé, quelque chose comme ceci:

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); 
    } 

Le code que je invoque jeter le Service:

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

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

     return mensagens; 
    } 
} 

Je reçois System.NullReferenceException à partir de db.GetMensagensGrupoAgendadas(). Serait-ce parce que DB est dans un serveur distant?

Puis-je appeler des méthodes de cette façon à partir du service?

PS: Le service est LocalSystem. J'ai essayé le service de réseau mais j'obtiens "l'erreur 5: accès refusé" en commençant le service.

+0

Vous souhaitez que le service appelle le code ASP.NET MVC? –

+0

Oui. La classe MessageSystem est un modèle. – jvalente

+0

Avez-vous ajouté le modèle connectionstring dans le app.config de votre service (comme celui que vous trouvez dans web.config)? – jmservera

Répondre

0

Je résolu ce problème en utilisant un service Web dans l'application ASP.NET MVC qui est exécuté pensé que le service Windows.

0

Voulez-vous appeler cela via un serveur Web ou voulez-vous simplement exécuter le même code que celui de votre application ASP.NET MVC dans votre service? Si c'est le dernier et que vous appelez un serveur distant qui utilise l'authentification intégrée, votre service doit fonctionner en tant qu'utilisateur valide sur le serveur distant (cet utilisateur aura besoin des droits d'ouverture de session en tant que service). capable d'exécuter le service). Si vous souhaitez l'utiliser en tant que service Web (par exemple, le code ASP.NET MVC s'exécute sur un serveur et que vous lui adressez des demandes depuis votre service), vous devez ajouter une référence Web à l'URL appropriée de votre ASP. L'application NET MVC expose, pas une référence de projet normale au projet. Voir Scott's post on mixing ASP.NET WebForms with ASP.NET MVC et consultez l'exemple avec le service ASMX pour plus de détails sur la création du service Web, puis ajoutez une référence Web (ou une référence de service) à cet ASMX à partir de votre projet de service.

[edited pour clarifier l'option de service Web après avoir vu le commentaire de jvalente]

+0

Le service et l'application MVC sont dans la même machine. Maintenant, j'ai réalisé que je ne peux même pas obtenir une chaîne du modèle. Je fais quelque chose de mal. Y a-t-il une particularité d'avoir un service "parlant" avec le modèle? – jvalente

1

Voulez-vous l'appeler via un serveur Web ou voulez-vous simplement exécuter le même code que celui de votre application ASP.NET MVC dans votre service? Si c'est le dernier et que vous appelez un serveur distant qui utilise l'authentification intégrée, votre service doit fonctionner en tant qu'utilisateur valide sur le serveur distant (cet utilisateur aura besoin des droits d'ouverture de session en tant que service). capable d'exécuter le service).

Questions connexes