J'ai récemment terminé le tutoriel OpenClassrooms sur les applications connectées en C#/.NET.
Grace à la partie WCF du cours, j'ai pu créé un client communiquant avec un service, et tout fonctionne du moment que le service et le client sont sur le même PC.
J'aimerai cela dit pouvoir accéder au service en utilisant un autre PC, mais je ne sais pas du tout comment m'y prendre ! J'ai lu pleins d'articles sur le sujet sur le net, mais je reste tout autant perdu.
Je vous poste ici les détails des scripts et fichiers de conf :
SERVICE - IService1.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace WcfService1
{
[ServiceContract]
public interface IService1
{
[OperationContract]
string SayHelloWorld();
}
}
SERVICE - Service1.svc.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace WcfService1
{
public class Service1 : IService1
{
public string SayHelloWorld()
{
return "Hello World !";
}
}
}
SERVICE - Web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.6.1" />
<httpRuntime targetFramework="4.6.1" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- Pour éviter la divulgation d'informations de métadonnées, définissez les valeurs ci-dessous sur false avant le déploiement -->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<!-- Pour recevoir les détails de l'exception dans les erreurs à des fins de débogage, définissez la valeur ci-dessous sur true. Pour éviter la divulgation d'informations d'exception, définissez-la sur false avant le déploiement -->
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<!--
Pour parcourir le répertoire racine de l'application Web lors du débogage, définissez la valeur ci-dessous sur true.
Définissez-la sur false avant le déploiement pour ne pas divulguer d'informations du dossier de l'application Web.
-->
<directoryBrowse enabled="true" />
<staticContent>
<mimeMap fileExtension=".svc" mimeType="application/octet-stream" />
</staticContent>
<handlers>
<add name="svc-integrated" path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler" resourceType="File" preCondition="integratedMode" />
</handlers>
</system.webServer>
</configuration>
CLIENT - Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
Console.WriteLine(client.SayHelloWorld());
Console.ReadKey();
client.Close();
}
}
}
J'ai lu les deux pages que tu m'as envoyé mais je dois t'avouer que je n'arrive pas en cerner en quoi elles pourraient m'être utiles. De ce que j'ai lu sur le net, mon problème pourrait plus provenir des fichiers App.config et Web.config.
J'ai tenté plusieurs autres manipulations, et que l'adresse IP utilisée soit privée ou publique, j'arrive toujours au même problème.
Je suis sûr que la solution ne doit pas être loin, mais étant une quiche en réseau, ça me fait galérer x).
Je sais pas trop si tu as déjà testé ou pas (un peu dur à cerner avec ce que tu as posté plus tôt) mais 127.0.0.1 c'est localhost, donc si t'essaies depuis une autre machine c'est totalement normal que ça ne marche pas.
Si tu essaies depuis une machine de ton réseau il te faudra l'adresse IP locale à ton réseau, souvent sous la forme 192.168.x.x ou 10.x.x.x. Vérifies au passage au niveau de ton firewall que ça ne coince pas.
Bienvenue au club, je suis aussi une quiche en réseau (mais j'aspire à quitter ce statut ! )
J'ai rencontré le même problème il y a peu, on m'a aussi rabâché que le problème venait de l'App.config. J'ai JAMAIS réussi à y résoudre le moindre problème.
Donc j'ai bidouillé avec ça. Comme le dit la description de la class ChannelFactory :
"Create a factory that creates channels of different types that are used by clients to send messages to variously configured service endpoints."
Elle permet au client de communiquer avec un point de terminaison (une porte d'entrée d'un service, en quelque sorte).
Je le perçois comme si on exposait à une certaine adresse (l'adresse de ton service) une interface (dans ton cas IService1) en utilisant un certain protocole.
BasicHttpBinding myBinding = new BasicHttpBinding();
EndpointAddress myEndpoint = new EndpointAddress("http://localhost/MathService/Ep1");
ChannelFactory<IMath> myChannelFactory = new ChannelFactory<IMath>(myBinding, myEndpoint);
// Create a channel.
IMath wcfClient1 = myChannelFactory.CreateChannel();
double s = wcfClient1.Add(3, 39);
On crée un objet BasicHttpBinding qui spécifie le protocole et tout ce qui va être lié au transport des données.
Puis, on défini l'URI, l'adresse du service (protocol, adresse, (port) et chemin d'accès.
Ensuite, on expose une interface IMath en utilisant les éléments précédents.
Puis on crée un channel, un client, une connexion peu importe
Qui nous permet d'utiliser la méthode Add de IMath.
Voilà ce que je sais/pense savoir. Peut être est-il possible de régler le problème autrement avec les .config (on peut voir l'équivalence dans ton .config côté client d'ailleurs) mais pour ma part, j'ai été traumatisé. Je trouve ces fichiers illogique et je ne serais pas capable de "raisonner avec confiance" sur ces trucs.
Merci à tous pour votre aide et désolé pour la réponse tardive !
PANZER VOR !
[WCF] Connexion au service depuis un autre PC
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
PANZER VOR !
PANZER VOR !
PANZER VOR !