2009-09-19 5 views
1

J'ai créé un serveur et généré mon client en tant que client asynchrone. Donc, quand je me connecte, je le fais de manière asynchrone. C'est très bien.J'ai fait un simple client WCF et j'ai coché la case "Créer des méthodes asynchrones". Que font ces méthodes?

J'ai une méthode sur mon client (une méthode de rappel) qui reçoit des données du serveur. Le serveur envoie également ces données en utilisant une méthode asynchrone.

Pour recevoir ces données sur mon client, je devrait avoir seulement une méthode comme celui-ci il me généré pour:

public void SendToClient(string dataToSend) 
{ 
} 

Bien qu'il ait un nom bizarre, c'est la méthode que je m'y attendais - il est appelé lorsque les données sont reçues.

Cependant, il a également généré ces méthodes:

public IAsyncResult BeginSendToClient(string dataToSend, AsyncCallback callback, object asyncState) 
{ 
     throw new NotImplementedException(); 
} 

public void EndSendToClient(IAsyncResult result) 
{ 
    throw new NotImplementedException(); 
} 

Je ne sais pas comment les utiliser. C'est comme une réception asynchrone, ou quelque chose. Comment les utiliser pour recevoir des données?

Répondre

1

Généralement, vous ne souhaitez pas que les opérations de contrat de rappel soient asynchrones. Vous seriez obligé de mettre en œuvre le modèle de programmation asynchrone qui est difficile à obtenir correctement, et inutile dans ce cas.

Vous devriez pouvoir vous passer de l'implémentation des versions asynchrones côté serveur et simplement remplir le synchrone. Côté client (l'appelant du contrat de rappel asynchrone), WCF devrait faire la bonne chose, et dans les coulisses, votre version synchrone sera appelée lorsque les données arrivent sur votre fin.

En sidenote, il semble qu'un client a signalé cela comme un bug, mais il semble que cela n'a pas été abordé: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=293507

+0

commentaire loyal, mais il ne répond pas exactement à la question ... – Murph

+0

Il doit être asynchrone, sinon, si vous essayez de rappeler à un client qui a retiré la prise de son PC, le serveur va se bloquer jusqu'à ce que le délai d'attente soit atteint, ce qui n'est pas acceptable. –

+0

La solution de contournement affichée sur ce lien semble être la solution - en la supprimant simplement du contrat. –