2009-07-01 8 views
1

J'essaie d'exécuter de façon asynchrone un service Web à partir de mon application Web ASP.NET. Ce service Web particulier (.asmx) appartient au même projet que mon application Web. Je l'ai remarqué que lorsque je fais référence au service Web à partir d'une autre application Web, je peux appeler le service Web en mode asynchrone via le code suivant:ASP.NET - Service Web asynchrone

TestService service = new TestService(); 
service.TestMethod(); 

Cependant, si je fais référence au service Web via une application Web distincte, je remarque que j'ai la possibilité de l'exécuter en mode asynchrone via le code suivant:

ServiceProxy.TestService service = new ServiceProxy.TestService();   
service.TestMethodAsync(); 

l'astuce est, je veux exécuter de manière asynchrone le service Web à partir d'une page Web qui se trouve dans la même application que mon service web. Est-ce possible? Si c'est le cas, comment?

Est-il possible de faire cela sans en mettant mon service web dans un projet séparé?

Merci,

+0

Le premier exemple de code est un exemple d'appel de la méthode _synchronously_ à partir du même projet, n'est-ce pas? Pas asynchrone comme les états de question. – GBegen

+0

Non, c'est pire. Vois ma réponse. –

+0

J'ai remarqué que l'OP utilisait la classe d'implémentation WebService directement et ne l'appelait pas en tant que service Web, mais mon point de vue était que la question en tant qu'appels appelle un appel asynchrone, quand il est clairement synchrone. – GBegen

Répondre

0

Il pourrait encore faire référence à la même application en tant que service Web, ne pouvait pas?

2

Tout d'abord, je vous recommande de mettre vos services Web dans un projet distinct.

En second lieu, lorsque vous avez appelé:

TestService service = new TestService(); 
service.TestMethod(); 

vous étiez tomber dans un piège que vous avez fait possible parce qu'ils étaient dans le même projet. Vous appeliez le TestMethod directement. Ce n'est pas un appel de service Web, c'est un appel direct au TestMethod.

Je vous suggère de mettre le service dans un autre projet, puis d'utiliser une référence Web ou une référence de service pour y accéder à partir de votre application Web.

EDIT: vous pouvez le conserver dans la même application, mais cela continuera à porter à confusion Vous devez toujours utiliser une référence Web ou une référence de service si vous l'appelez en tant que service Web.

Si cela fait partie de la même application, alors pourquoi est-ce un service Web?

0

Pour éviter toute confusion, vous ne devriez probablement pas appeler votre méthode de service Web directement. Laissez cette méthode appelée par ASP.Net en réponse à une demande de méthode Web.

Vous pouvez, cependant, déplacer l'implémentation de votre méthode Web dans une autre classe qui peut être instanciée et appelée à la fois par la classe de service Web et votre application Web à tout autre moment. Avec cette classe en place, si vous voulez appeler l'une de ses méthodes de manière asynchrone, vous devriez chercher à créer un délégué et utiliser BeginInvoke() et EndInvoke().

Questions connexes