2013-07-15 3 views
2

J'utilise .NET 3.5This est une question connexe mais en utilisant TPL Async Library, depuis que je suis en 3.5 j'ai besoin d'une autre approche.L'appel async WCF sans référence de service en utilisant ChannelFactory

Je l'habitude d'appeler un WCF de manière asynchrone en ajoutant une référence de service et la création de ses opérations async en utilisant Visual Studio 2010.

Maintenant, j'ai créé un proxy dynamique utilisant la CreateChannel<T> de la classe ChannelFactory et je dois appeler une méthode de manière asynchrone. Voici comment je crée le proxy WCF:

public MyInterface Proxy { get; set; } 

    BasicHttpBinding binding = new BasicHttpBinding(); 
    EndpointAddress ep = new EndpointAddress("http://localhost/myEndpoint"); 
    Proxy = ChannelFactory<MyInterface>.CreateChannel(binding, ep); 

    // I call my method 
    Proxy.MyMethod(); 

    [ServiceContract] 
    public Interface MyInterface 
    { 
     [OperationContract] 
     void MyMethod(); 
    } 

Je n'ai pas besoin de la réponse du service.

+2

se réfèrent à http://stackoverflow.com/ question ns/400798/how-to-make-a-call-to-my-wcf-service-asynchrone – vibhu

Répondre

1

Je ne suis pas sûr si je vous ai bien compris, mais si vous voulez faire de votre Proxy.MyMethod pour exécuter async au moyen de .NET 3.5, vous pouvez utiliser BeginInvoke standart de la classe Delegate, comme ceci:

//Make a delegate for your Proxy.MyMethod 
private delegate void MyDelegate(); 

Ensuite, dans le code, vous appelez simplement votre méthode async:

BasicHttpBinding binding = new BasicHttpBinding(); 
EndpointAddress ep = new EndpointAddress("http://localhost/myEndpoint"); 
Proxy = ChannelFactory<MyInterface>.CreateChannel(binding, ep); 
var delInstance = new MyDelegate(Proxy.MyMethod); 
var result = delInstance.BeginInvoke(); 

Si vous devez vérifier quelque chose sur les résultats, la variable utilisation de résultat pour cette

+0

Merci. Puisque ce n'est pas la solution que je cherchais, cela semble fonctionner de manière asynchrone. Cependant, je modifie votre réponse parce que la façon dont vous avez déclaré le délégué ne m'a pas permis de fonctionner de manière asynchrone. – anmarti

+0

@senyorToni De rien. De plus, s'il vous est possible d'utiliser proxi au lieu de ChannelFactory, vous pouvez créer une classe proxi pour votre client en utilisant svcutil avec la directive/async. Cela générera automatiquement la méthode BeginMyMethod, qui démarrera async. Sans résultats, l'appel du tour serait une seule ligne de code: new YourProxiClient(). BeginMyMethod(); – Alex

Questions connexes