donc je suis un peu confus sur ce que sont les points de terminaison de service et l'adresse de base de l'hôte. Dans tous les exemples que j'ai parcourus jusqu'à présent, ils parlent de la configuration des points de terminaison avec les liaisons requises et vous pouvez normalement naviguer vers ces points de terminaison
Cependant, lorsque j'utilise la configuration suivante pour configurer et héberger mon service, il ne semble que révéler l'adresse de base des hôtes.
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<!-- When deploying the service library project, the content of the config file must be added to the Host's
app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<services>
<service name="HostService.EvalService">
<endpoint address="http://localhost:8080/basic"
binding="basicHttpBinding" contract="HostService.IEvalService" />
<endpoint address="http://localhost:8080/ws"
binding="wsHttpBinding" contract="HostService.IEvalService" />
<endpoint address="mex" binding="mexHttpBinding"
name="mex" contract="IMetadataExchange" />
<Host>
<baseAddresses>
<add baseAddress="http://localhost:8080/EvalsService" />
</baseAddresses>
</Host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Quelqu'un peut m'expliquer cela?
Lorsque vous hébergez le service WCF sur IIS, l'adresse de base ne peut être que l'URL du fichier .svc. Si vous spécifiez une autre adresse de base, elle est ignorée. Vous pouvez toujours spécifier l'URI relatif de vos points de terminaison, tel que address="basic"
ou address = "ws"
. L'adresse sur le noeud final devient alors <URL to the .svc file>/basic
et <URL to the .svc file>/ws
dans ce cas.
Lorsque vous laissez l'adresse de noeud final vide, cela signifie que le noeud final utilisera simplement l'adresse de base correspondante pour son adresse de noeud final. Alternativement, vous pouvez configurer l'adresse de base comme chemin absolu de votre service ou, comme meilleure approche, écrire des adresses relatives pour vos points de terminaison.
Lorsque vous hébergez vos services sur IIS, l'adresse de base du service est déterminée par le répertoire virtuel IIS avec le fichier .svc.
Supposons que vous ayez un fichier nommé calc.svc et que vous le placiez dans un répertoire virtuel qui correspond à 'http: // localhost: 8080/calcservice'. L'adresse de base de ce service sera "http: // localhost: 8080/calcservice/calc.svc".
IIS force vos points de terminaison à utiliser cette adresse de base déterminée en fonction de votre chemin de déploiement de service. Si vous spécifiez une adresse de base différente, puis le répertoire virtuel correspondant, vous obtiendrez une exception.
Considérez la configuration ci-dessous;
<configuration>
<system.serviceModel>
<services>
<service name="CalculatorService">
<!-- base address determined by IIS virtual directory -->
<endpoint binding="basicHttpBinding" contract="ISimpleMath"/>
<endpoint address="secure" binding="wsHttpBinding" contract="ISimpleMath"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
...
... l'adresse du premier point de terminaison devient la même que l'adresse de base ('http: // localhost: 8080/calcservice/calc.svc') car j'ai laissé l'adresse de point de terminaison vide. L'adresse du deuxième point de terminaison devient la combinaison de l'adresse de base ajoutée à "sécurisé", comme ceci: "http: // localhost: 8080/calcservice/calc.svc/secure". Et l'adresse du point de terminaison "mex" est "http: // localhost: 8080/calcservice/calc.svc/mex". Cela peut sembler un peu étrange à certaines personnes car la partie relative de l'adresse est ajoutée à droite du nom de fichier, mais vous devez vous rappeler que calc.svc fait partie de l'adresse de base, il doit donc fonctionner de cette façon.
Bien que vous ne puissiez pas naviguer vers les URL "../mex" ou "../secure" via le navigateur, elles sont en fait actives et les clients peuvent consommer ces adresses.
Comportement du client
Les clients n'ont aucune connaissance de l'adresse de base du service et n'ont pas besoin de prendre en charge quelque chose de similaire de leur côté du câble. Par conséquent, vous ne trouverez rien lié aux adresses de base dans le modèle d'objet côté client ou la section de configuration. Les clients choisissent simplement un point de terminaison particulier, qui est toujours configuré avec une adresse absolue, et cette adresse absolue détermine l'adresse qu'il utilisera pendant la transmission.
Ci-dessus des informations extraites principalement de l'excellent Aaron Skonnard article sur msdn. Je vous suggère fortement de le lire pour obtenir les principes fondamentaux de l'adressage WCF.
lorsque vous utilisez l'adresse de base, vous n'avez pas besoin de fournir l'URI absolu pour vos points de terminaison, par exemple, vous pouvez utiliser address="basic"
dans la section de configuration du noeud final, cela signifie que l'adresse de ce noeud final est http://localhost:8080/EvalsService/basic
.