web-dev-qa-db-fra.com

Exécutez les méthodes WCF à partir d'un navigateur

Je crée un service WCF très basique avec C # dans Visual Studio 2010. Je veux savoir si je peux exécuter mes méthodes directement à partir d'un navigateur en tapant quelque chose comme: //localhost:49815/Service1.svc/methodName(parameterValue)?

Voici l'essence de mon code.

Interface:

using ...
namespace WcfService1{   
    [ServiceContract]
    public interface IService1{
        [OperationContract]
        [WebGet]
        string echoWithGet(string s);
        [OperationContract]
        [WebInvoke]
        string echoWithPost(string s);
    }
}

Méthodes:

 public string echoWithGet(string s ){
            return "Get: "+s;
        }

 public string echoWithPost(string s){
            return "Post: " + s;
        }
30
javaNinja

Oui, vous pouvez appeler ces méthodes dans un navigateur, si votre service est configuré correctement, bien que la syntaxe de l'URL soit incorrecte.

Pour appeler des méthodes WCF à partir d'un navigateur, vous devez faire deux choses:

  • Utilisation [WebGet] et [WebInvoke] attributs sur vos méthodes, ce que vous avez fait.
  • Utilisez un webHttpBinding pour le point de terminaison de votre service et activez le comportement webHttp. Voir http://weblogs.asp.net/kiyoshi/archive/2008/10/08/wcf-using-webhttpbinding-for-rest-services.aspx pour un exemple de configuration, mais les parties pertinentes sont:

     <service> 
        <endpoint behaviorConfiguration="webBehavior" binding="webHttpBinding" contract="MyServiceContract" /> 
    </service> 
    
    <endpointBehaviors> 
        <behavior name="webBehavior"> 
            <webHttp /> 
        </behavior> 
    </endpointBehaviors> 
    

Une fois cela fait, WCF commencera à écouter la demande d'URL et les acheminera vers vos méthodes Web appropriées. Vous pouvez configurer des modèles d'URL dans vos attributs WebGet ou WebPost qui mappent les segments d'URL aux paramètres de la méthode, si vous souhaitez rendre vos URL "plus propres", mais c'est facultatif. Sinon, vous transmettez les paramètres de la même manière que vous passez le paramètre à toute autre URL, en utilisant le délimiteur de paramètre:

http://localhost:49815/MyService.svc/methodName?parameterName=value

Notez que la valeur par défaut pour une méthode invoquée sur le Web est un POST. Techniquement, vous pouvez le faire via un navigateur mais c'est beaucoup plus difficile (vous devez créer un formulaire HTML local, ou utiliser votre console Javascript, ou quelque chose similaire), mais les méthodes WebGet peuvent être appelées simplement en demandant l'URL correcte.

De plus, si vos méthodes renvoient quelque chose de plus complexe qu'une chaîne, WCF essaiera de le sérialiser en JSON; vous devrez peut-être "voir la source" sur la page résultante pour la voir.

46
Michael Edenfield

Cela ne répond pas à votre question, mais cela vous facilitera beaucoup la vie pour rendre votre service RESTful (ou REST-like). Bien que vous puissiez le faire avec WCF, je vous recommande vivement de consulter API Web ASP.NET .

Il existe également d'autres alternatives disponibles pour créer des services RESTful, telles que Nancy ou ServiceStack .

5
petr k.

Une réponse directe. Pour les méthodes GET, vous pouvez utiliser un navigateur pour afficher le résultat. FOR POST Méthodes que vous ne pouvez pas utiliser le navigateur, si vous collez directement votre URL pour la méthode de publication. Pour atteindre POST vous pouvez soit créer un FORMULAIRE HTML ou utilisez FIDDLER pour voir le résultat.

1
maxspan