web-dev-qa-db-fra.com

Possible d'appeler le service ASMX avec paramètre via la chaîne de requête url?

J'ai un service asmx qui prend un seul paramètre int. Je peux ouvrir l'URL du service et voir l'écran de description du service. À partir de là, je peux entrer les paramètres de la requête dans un formulaire et appeler le service Web.

Existe-t-il un moyen d'invoquer un service Web directement à partir d'une URL/chaîne de requête?

Cela ne fonctionne pas:

http: // localhost: 4653/MyService.asmx? op = MyWebMethod & intParameter = 1

Des idées? J'aimerais vraiment pouvoir le faire à partir d'un lien standard en raison de certains problèmes de déploiement. Vais-je devoir encapsuler la demande dans une page aspx normale?

22
Alex

Vous pouvez décorer votre méthode pour autoriser les requêtes HTTP GET, qui devraient à leur tour faire ce que vous recherchez:

[WebMethod]  
[ScriptMethod(UseHttpGet=true)]
public string MyNiftyMethod(int myint)
{
    // ... code here
}

Et modifiez le web.config:

<system.web>
<webServices>
  <protocols>
    <add name="HttpGet"/>
  </protocols>

Ensuite, vous pourrez appeler cette méthode comme suit:

http://mysite.com/Service.asmx/MyNiftyMethod?myint=12345

EDIT: Notez que cette méthode d'exécution des requêtes GET comporte certains risques de sécurité. Selon le documentation MSDN pour UseHttpGet :

Définir la propriété UseHttpGet sur true peut poser un risque pour la sécurité de votre application. si vous travaillez avec des données ou des transactions sensibles. Dans les requêtes GET, le message est encodé par le navigateur dans l'URL et est donc une cible plus facile pour la falsification.

48
Scott Anderson

Les services Web ASMX utilisent SOAP. SOAP les requêtes n'utilisent que POST pour appeler les méthodes. Vous devrez générer un client proxy dans votre page aspx pour appeler le service Web. Si vous en avez vraiment besoin) utilisez les verbes GET pour appeler les services Web dont vous pourriez avoir besoin pour utiliser une approche différente telle que WCF REST .

10
Darin Dimitrov