2011-09-16 7 views
1

Q: Y at-il une différence pour le client entre l'appel de service asynchrone WCF et l'appel client asynchrone?WCF contracte le service asynchrone contre le client asynchrone

En ce moment, j'ai un contrat qui ressemble à ceci

[ServiceContract] 
public interface IFoo 
{   
    [OperationContract(AsyncPattern = true)] 
    IAsyncResult BeginGetFoo(); 

    [OperationContract] 
    FooResult EndGetFoo(IAsyncResult asyncResult); 

    ... 
} 

Et je pensais à factoriser à quelque chose comme ça (et simplement l'appeler plus tard de manière asynchrone à partir d'un client WPF).

[ServiceContract] 
public interface IFoo 
{   
    [OperationContract] 
    FooResult GetFoo(); 

    ... 
} 

La raison est que je veux simplifier le contrat de service pour le client.

Répondre

1

Il y a essentiellement aucune différence (si elle est correctement écrit - remarquez la signature ci-dessous corrigée: les besoins opération commencent à prendre un AsyncCallback et un paramètre object, et l'opération de fin ne doit pas être décoré avec [OperationContract]). Si vous voulez gérer le thread vous-même, alors n'hésitez pas à le déclarer comme une opération synchrone; Si vous voulez laisser WCF gérer cela, alors allez avec le modèle asynchrone. Mais la requête que le client enverra au serveur est la même dans les deux cas.

[ServiceContract] 
public interface IFoo 
{   
    [OperationContract(AsyncPattern = true)] 
    IAsyncResult BeginGetFoo(AsyncCallback callback, object state); 
    FooResult EndGetFoo(IAsyncResult asyncResult); 

    ... 
} 
+0

grâce ce sens faire – oleksii

+0

Y at-il une manière similaire à avoir une interface « simple » pour le client lors de l'utilisation de la mise en œuvre async basée sur les tâches (à savoir où l'opération déclare son type de retour en tant que groupe de ). La différence ici est que tous les exemples que j'ai vus ont seulement une méthode déclarée pour l'opération (plutôt que 2 comme ci-dessus) et qu'une méthode a un type de retour de tâche - qui semblerait impliquer que le client va recevoir un résultat de la tâche , que je voudrais éviter. –

Questions connexes