Je voudrais créer facilement des méthodes asynchrones pour mon service WCF. Je sais que la méthode consiste à utiliser le modèle asynchrone Début/Fin et à étiqueter ma méthode Begin avec AsyncPattern = true. Je me demande si j'ai vraiment besoin de créer mon propre objet AsyncResult à gérer (ce que je suis un peu nerveux) ou si je peux utiliser un gestionnaire d'événement et envelopper mon Begin/End autour de l'invocation Begin/End du gestionnaire d'événements . Cela semble être une manière détournée de le faire, mais puisque (pour autant que je sache) je ne peux pas m'abonner ou invoquer l'événement directement à partir de la WCF, cela semble être une solution plausible.Puis-je raccourcir le modèle async Begin/End en utilisant un événement pour créer mon AsyncResult?
private event EventHandler<RequestEventArgs> OnSendRequest;
[OperationContract(AsyncPattern = true)] // Borrowed from the interface for this example
public IAsyncResult BeginSendRequest(Request request, AsyncCallback callback, object state)
{
EventHandler<RequestEventArgs> handler = OnSendRequest;
if (handler != null)
return handler.BeginInvoke(this, new RequestEventArgs(request), callback, handler);
return null;
}
public void EndSendRequest(IAsyncResult result)
{
EventHandler<RequestEventArgs> handler = (EventHandler<RequestEventArgs>)result.AsyncState;
handler.EndInvoke(result);
}
Puis, évidemment, quelque chose souscrit à l'événement pour effectuer le travail. Je suis également en train de jeter l'état de l'objet passé à ma méthode Begin, en faveur de passer le gestionnaire d'événements en tant qu'état afin que j'y accède pour appeler EndInvoke.
Est-ce une option viable? (J'ai une connaissance et une compréhension limitées de la façon dont l'objet AsyncResult et la programmation asynchrone fonctionnent en général.)
Merci, qui semble intéressant, mais pas applicable à mon programme que je fais un service WCF/WCF mise en œuvre de rappel du client, pas un service Web à un point final JavaScript. –
Cela fonctionne partout où ils sont implémentés. IObservable – AdamSane
En sortie de boîtier, ils prennent en charge les connexions WCF. J'ai posté un exemple de téléchargement depuis un site Web. Je n'ai pas un exemple de WCF à portée de main mais le code est presque le même. Appelez simplement Subscribe sur l'objet client wcf, il vous donnera les gestionnaires (item, exception, finished). Ils l'ont porté en javascript. – AdamSane