J'essaie de programmer un serveur client basé sur l'infrastructure de rappel fournie par WCF, mais il ne fonctionne pas de manière asynchrone.WCF: le rappel n'est pas asynchrone
Mon client se connecte au serveur appelant une méthode de connexion, où je sauve le client canal de rappel en faisant
MyCallback callback =
OperationContext.Current.GetCallbackChannel<MyNamespace.MyCallback>()
Après que le serveur exécute une partie et utilise l'objet de rappel pour communiquer avec le client. Tout cela fonctionne, le problème réside sur le fait que même si j'ai défini la méthode dans le OperationContract
comme IsOneWay=true
, le serveur se bloque toujours lors de l'appel au client. J'ai testé cela en lançant le serveur pour le débogage dans Visual Studio, en le détachant, en lançant le client, en appelant la méthode de connexion mentionnée ci-dessus, en mettant un point d'arrêt dans la méthode de rappel implémentée du client et en rendant le le serveur envoie une réponse au client. Le serveur arrête de faire ce qu'il est censé faire, en attendant la réponse du client.
Toute aide est appréciée.
J'ai déjà eu marqué comme multiple, et essayé avec Reentrant et c'est pareil. J'ai lu que même si un service est marqué comme unilatéral, il peut toujours bloquer dans certaines conditions, le problème est que dans mon cas, c'est la norme au lieu d'une exception. Je suppose que c'est lié à la façon dont la liaison est configurée mais je ne vois rien qui puisse le changer. Merci pour l'aide. –
Multiple et réentrant ne fonctionnait pas car même si nous autorisons plusieurs threads pour le moment, il est configuré pour n'en autoriser qu'un seul. Pourtant, cela ne résout pas le problème car l'appel se bloque quand il ne devrait pas. Je vais mettre en œuvre un thread qui gère l'envoi des messages. Merci pour tout. –