Bonjour à tous,
J'ai développé une application WCF permettant d'activer une clé de licence.
Je l'ai déployé sur un serveur IIS 7.5 en créant un site web et un répertoire virtuel. En local, tout fonctionne correctement mais pas à distance.
Pour expliquer un peu, le serveur IIS est derrière une box orange avec une redirection de port. Lorsque l'on test dans un navigateur en rentrant l'IP publique, le numéro de port et le nom du service, la page du service s'affiche correctement mais le lien pour afficher le wsdl contient le nom du serveur : http://serverName:35000/ServiceName.svc?wsdl donc lorsque l'on clique dessus, impossible de résoudre le nom local de la machine ce qui est normal. Si je garde l'adresse de la page et que j'ajoute ?wsdl à la fin, j'ai bien le wsdl qui s'affiche mais toujours avec le nom du serveur :
Ma question est comment faire pour que le wsdl généré contienne l'IP publique de la box et non le nom du serveur ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <wsdl:service name="ServiceName"> <wsdl:port name="BasicHttpBinding_IServiceName" binding="tns:BasicHttpBinding_IServiceName"> <soap:address location="http://serverName:35000/ServiceName.svc"/> </wsdl:port> </wsdl:service>
Après de nombreuses recherches, j'ai trouvé qu'il fallait modifier le binding dans IIS (modifier les liaisons et ajouter un nom d'hôte). Mon problème est que si en nom d'hôte je tape l'IP publique, j'obtiens une erreur Invalid Hostname en chargeant la page. La seule piste que j'ai trouvé est de saisir une url dans la case nom d'hôte (propriétés du site web dans IIS) donc d'avoir une url et un nom de domaine valide ce qui n'est pas mon cas.
Merci pour vos expériences et votre aide
web.config :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 <configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> <system.serviceModel> <services> <service name="myNamespace.ServiceName.svc"> <endpoint address="http://xxx.xxx.xxx.xxx:35000/myNamespace/ServiceName/" binding="wsHttpBinding" contract="myNamespace.IServiceName"> <identity> <dns value="xxx.xxx.xxx.xxx" /> </identity> </endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="true"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> </configuration>
Partager