Je souhaite accéder à toutes les méthodes exposées dans le service via l'URL. si supposons l'URL sera:
http://localhost/MyService/MyService.svc
Comment puis-je accéder aux méthodes:
Pour utiliser un service WCF, vous devez créer un proxy client WCF.
Dans Visual Studio, cliquez avec le bouton droit de la souris sur le projet et choisissez "Ajouter une référence de service" dans le menu contextuel. Tapez l'URL à laquelle vous souhaitez vous connecter et si ce service est en cours d'exécution, vous devez générer un fichier proxy client pour vous.
Ce fichier contiendra généralement une classe appelée MyService Client - vous pouvez instancier cette classe et vous devriez voir toutes les méthodes disponibles sur cette classe client à votre disposition.
Si vous ne souhaitez pas ajouter de référence de service dans Visual Studio, vous pouvez obtenir le même résultat en exécutant l'outil de ligne de commande svcutil.exe
. Il générera également tous les fichiers nécessaires à votre classe de proxy client.
Marc
METTRE À JOUR:
si vous souhaitez initialiser un proxy client au moment de l'exécution, vous pouvez le faire. Vous devez choisir la liaison à utiliser (protocole de transport) et l'adresse à laquelle vous connecter, puis procéder comme suit:
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://localhost:8888/MyService");
MyServiceClient serviceClient = new MyServiceClient(binding, address);
Mais même dans ce cas, vous devez d'abord importer et créer le client proxy à l'aide des outils "Ajouter une référence de service" ou svcutil.exe.
Pour répondre comment faire sans avoir une référence de service. Regardez ici (option #a):
Écrire votre premier client WCF
Vous avez encore besoin d'une référence (à savoir une référence à un assembly contenant le contrat/l'interface), mais vous ne faites pas de référence de service.
EDIT: Bien que ce qui précède soit possible, je ne le recommanderais pas. Les performances ne sont pas vraiment géniales lorsque vous devez générer des mandataires comme celui-ci. J'utilise généralement svcutil.exe et crée un assembly contenant mes clients et crée une référence à cet assembly. De cette manière, vous avez plus d’options pour contrôler l’apparence des mandataires.
Vous pouvez également utiliser la classe WebClient pour appeler le service WCF sans avoir besoin d'un proxy de service. Vous pouvez effectivement envoyer et recevoir des chaînes et des données binaires, ainsi que simuler des POST.
Je l'utilise beaucoup pour les composants réutilisables où le développeur peut ne jamais créer les méthodes proxy requises. Une bonne comparaison des façons de faire POST est disponible ici .
Vous l’appelez avec un/nom_fonction, par exemple:
http: //localhost/MyService/MyService.svc/GetVersionNumber
Modifier:
Comment configurez-vous votre méthode dans le service WCF pour pouvoir l'appeler directement à partir du navigateur?
J'ai une interface:
[ServiceContract]
public interface IWebServiceImpl
{
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "GetVersionNumber")]
string GetVersionNumber();
Et une classe pour implémenter la méthode GetVersionNumber
dans l'interface:
public class WebServiceImpl
{
public string GetVersionNumber()
{
return "1.0.0.0"; //In real life this isn't hard-coded
}
}
Enfin, voici la configuration Web.config:
<system.serviceModel>
<diagnostics>
<messageLogging logEntireMessage="true" logMalformedMessages="false" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="false" maxMessagesToLog="3000" maxSizeOfMessageToLog="2000"/>
</diagnostics>
<bindings>
<webHttpBinding>
<binding name="webBinding">
<security mode="Transport"/>
</binding>
</webHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="ServiceBehaviour" name="YOURWebServiceNameSpace.WebServiceImpl">
<endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" contract="YOURWebServiceNameSpace.IWebServiceImpl"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviour">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
Vous pouvez simplement fournir le wsdl de votre service: http: //localhost/MyService/MyService.svc? Wsdl .
À partir de WSDL, vous pouvez générer des classes de proxy et les utiliser sur le client.