Je cherchais depuis des heures mais je ne trouvais pas la solution. Je vais expliquer brièvement.
J'apprends les services de la WCF. Je viens de créer un service et de le parcourir. Voici le fichier de configuration:
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="EmployeeServiceBehaviour">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="EmployeeServiceBehaviour" name="EmployeeConfiguration">
<endpoint address="http://localhost:2005/EmployeeService.svc" binding="basicHttpBinding"
bindingConfiguration="" contract="IEmployeeConfiguration" />
</service>
</services>
</system.serviceModel>
<system.web>
<compilation debug="true"/>
</system.web>
<system.webServer>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
Lorsque vous naviguez dans Visual Studio, il ne semble pas y avoir de problème. Ça fonctionne parfaitement.
Deuxièmement, j'essaie de le publier sur IIS. Ce que je fais est ceci:
Je publie le service dans un dossier et ajoute ce service à IIS.
Je sélectionne le port 3006 comme port.
Ci-dessous son fichier de configuration. Notez que j'ai aussi changé le port dans config en 3006
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="EmployeeServiceBehaviour">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="EmployeeServiceBehaviour" name="EmployeeConfiguration">
<endpoint address="http://localhost:3006/EmployeeService.svc" binding="basicHttpBinding"
bindingConfiguration="" contract="IEmployeeConfiguration" />
</service>
</services>
</system.serviceModel>
<system.web>
<compilation/>
</system.web>
<system.webServer>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
Et j'attends de courir sans heurts mais:
IIS me donne une page blanche de Chrome
Et HTTP 400 Bad Request de l'Explorateur
Enfin, si je supprime une partie de l'adresse du fichier de configuration, tout fonctionne bien. Mais une autre chose confuse est que, sur mon autre ordinateur après le scénario ci-dessus (adresse fournie), je peux accéder au service. Donc, je suis vraiment fatigué de chercher pourquoi cela fonctionne sur un ordinateur et non sur un autre. Quelqu'un pourrait-il me l'expliquer?
Je sais que c'est un peu plus long, mais je dois l'expliquer clairement. Merci
D'après mes recherches, je ne devrais pas fournir d'adresse.
msdn.Microsoft.com/en-us/library/aa751792(v=vs.110).aspx
Vous devez toujours utiliser des adresses de points de terminaison relatives pour les points de terminaison du service hébergé par IIS . La fourniture d'une adresse de noeud final entièrement qualifiée (par exemple, Localhost/MyService.svc) peut entraîner des erreurs dans le déploiement du service Si l'adresse du noeud final ne pointe pas vers l'application IIS qui héberge le service exposant le noeud final. L'utilisation d'adresses Relatives aux points d'extrémité relatifs pour les services hébergés évite ces conflits potentiels.
Cela peut être utile. Je viens de passer plus de 2 heures à essayer de faire fonctionner cela. J'utilise FF et son ensemble comme navigateur par défaut.
en FF, il ajoutait un/à la fin de mon URL
http://services.tester.dev/VehicleFeedService.svc/
qui a retourné un NetworkError: 400 Bad Request
cependant, en IE ou chrome, il ne met pas le/à la fin et cela fonctionne bien.
une chose à noter .. même dans FF qui me donnait une demande de 400 mauvaises, le ?wdsl
a fonctionné
http://services.tester.dev/VehicleFeedService.svc?wsdl
il semble que le/était à l'origine du problème
Je pense que cela résoudra votre problème:
Ajoutez ce point final à votre service:
<endpoint address="mex" binding="mexHttpBinding"
bindingConfiguration="" contract="IMetadataExchange" />
Et remplacez l'attribut name
de la service
par le nom complet de votre classe de service:
<service behaviorConfiguration="EmployeeServiceBehaviour"
name="Namespace.EmployeeConfigurationClass">
J'espère que ça suffit
Vous pouvez essayer fiddler et le svcTracer qui peut vous donner beaucoup d’informations de débogage. Vous pouvez également utiliser le drapeau includeExceptionDetailInFaults=true
sur le serveur, mais il est important de signaler que vous n’avez pas toujours le droit d’envoyer ces informations au client si le client est une entité externe. Avec cet avertissement, voici comment l'utiliser.
<serviceBehaviors>
<behavior name="ServiceBehavior">
....
<serviceDebug includeExceptionDetailInFaults="true" />
....
</behavior>
</serviceBehaviors>
Bon débogage :)