2010-02-26 4 views
0

J'ai une application Web asp.net pour appeler une fonction dans le service WCF pour envoyer un message SMS. Après l'envoi d'un message, le service WCF doit continuer à vérifier une boîte de réception virtuelle au niveau du fournisseur SMS et notifier mon application Web s'il y a une nouvelle réponse. Il peut y avoir plus d'une application Web pour utiliser ce service. Quel est un bon moyen de mettre en œuvre cela?Récupération du message SMS du fournisseur SMS par WCF

Actuellement, j'ai une fonction dans le service WCF comme ceci, c'est un contrat d'opération OneWay. Je pense à configurer la gestion d'instance en tant que PerSession.

public void Send(SMSMessage message) 
    { 
     bool startRetrieving = _smsContext.Send(message); 

     //keep polling virtual inbox to retrieve replies until it's expired 
     while (startRetrieving && DateTime.Now < message.ReplyExpiry) 
     { 
      //send a http request to check inbox 
      //if there is any new reply, notify my web application by making 
      //a http request 
      //Check the inbox every xxxx seconds. 
      System.Threading.Thread.Sleep(xxxx); 
     } 

     //if it is expired, tell sender app that time to receiving reply is expired 
    } 
+0

Faire des recherches sur les "contrats duplex" –

+0

Je sais comment configurer les choses en duplex, mais l'appel à cette fonction est fait dans une page ASP. Cette page peut être fermée. Comment WCF se débrouiller pour faire un rappel? –

Répondre

0

Ceci est une situation dans laquelle le modèle de corrélation est un bon ajustement.

http://www.eaipatterns.com/ramblings/09_correlation.html

L'idée de base est que chaque appel ou client obtient son propre identifiant, puis quand la réponse revient, vous pouvez identifier où le résultat devrait aller à cause du l'ID de corrélation. La façon dont vous l'implémentez dépend de la robustesse de votre service. Si vous utilisez par session, et la machine redémarre, et vous perdez vos sessions, est-ce OK?

Lorsque nous avons un système où nous ne devons pas perdre d'informations, nous mettons en place 2 services. L'un envoyait l'appel, et l'autre renvoyait le service au client. Si quelque chose tombe en panne, tout sera envoyé correctement lorsque le système est de nouveau sauvegarder.