2009-11-09 4 views
0

J'ai un site Web .NET avec un service WCF. Comment accéder au contexte opérationnel actuel de mon service? Un travail possible consiste à simplement faire un appel au service au sein de l'application ... mais cela semble bâclé et redondant; surtout lorsque le service et le site Web sont la même application.Accéder au service WCF sur le même serveur

- mise à jour
L'objectif est de créer un système de notification via Silverlight et WCF. Lorsqu'un utilisateur crée un jeu, il doit attendre un joueur. Quand un autre joueur décide de rejoindre un jeu via la page de liste de jeu, qui est juste le HTML standard, le créateur doit être averti que quelqu'un veut jouer. L'utilisateur appuie sur le bouton de jeu "Joindre", le serveur effectue une publication de page et parle au service WCF. La WCF envoie ensuite le message à l'interface Silverlight du créateur du jeu.

Maintenant je pourrais juste créer une référence de Web à ma propre application, mais je cherche à contourner cette étape, puisqu'ils sont tous les deux sur le même serveur; même application d'ailleurs.

+0

Je ne sais pas ce que vous demandez. – Brian

Répondre

0

Après de nombreuses recherches et une meilleure compréhension de la WCF, j'ai maintenant trouvé ma réponse. J'utilisais la liaison DuplexService (session active/instance conservée sur le client/serveur). L'accès aux instances de session Duplex n'est pas possible via une page Web aspx standard. Vous devez avoir un client (application Silverlight ou Windows) qui peut maintenir une session active sur le serveur, dans le cas où le serveur envoie des messages au client.

0

Pouvez-vous définir "contexte d'opérations en cours?"

Si vous voulez juste utiliser le service à partir du même projet ou d'un site, vous instanciez le service comme vous le feriez pour tout autre classe:

public class MyWCF : IMyWCF 
{ 
    public void DoWork() 
    { 
    /// do something 
    } 
} 

ailleurs ...

IMyWcf wcf = new MyWcf(); 
wcf.DoWork(); 

La différence entre l'utilisation du service ici ou dans une autre application est que vous n'utilisez pas l'objet proxy/client généré lorsque vous ajoutez une référence de service.

+0

OperationContext: http://msdn.microsoft.com/en-us/library/system.servicemodel.operationcontext.aspx – jrista

+0

Il s'agit toujours d'une mauvaise idée, car elle contourne complètement l'exécution complète de WCF. –

+0

@Drew "mauvaise idée" dépend de votre application. Si vous avez du code qui est utilisé à la fois sur le serveur d'hébergement et par d'autres, WCF est un bon moyen de fournir cette interface, mais il n'y a rien de mal à utiliser la classe directement. Avoir une application à travers les frais généraux de parler à elle-même via WCF est tout au plus idiot. –

0

Vous devez fournir un peu plus de contexte et de détails architecturaux. Principalement ... d'où, exactement, avez-vous besoin du contexte d'opération? Si vous essayez d'utiliser le contexte d'opération en dehors de la portée du service Web, alors je dirais que vous créez un couplage TRÈS MAUVAIS entre votre application et un détail infrastructurel et contextuel que votre application n'a absolument aucune connaissance.

Encore une fois, vous devez clarifier votre question afin que je puisse fournir une meilleure réponse.

1

Je suis d'accord avec David; Si ce que vous voulez, c'est appeler le service sans passer par WCF, vous pouvez simplement instancier la classe de service.

D'autre part, si vous voulez que le service WCF pour être en mesure d'accéder à l'objet HttpContext et avoir un accès complet à la session de l'utilisateur Web, puis vous ajoutez les AspNetCompatibilityRequirements attribut sur votre classe de service (interface non):

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class MyService: IMyService 
{ 
    public string DoWork(string myInput) 
    { 
     HTTPContext context = HTTPContext.Current; 
     ... 
     return myInput; 
    } 
} 

Que ce soit bon ou mauvais ou couplage proche ou quoi que ce soit dépend vraiment de votre utilisation et la disponibilité du service.

Questions connexes