2009-08-24 9 views
7

On m'a dit que wsHttpBinding ne prend pas en charge les clients plus anciens qui ont encore besoin d'utiliser une version antérieure de SOAP. Je souhaite ajouter un point de terminaison BasicHttpBinding dans la même application de service WCF afin que les clients puissent utiliser l'un ou l'autre point de terminaison en fonction de la technologie qu'ils exécutent. Je suis confus quant à ce que l'adresse à utiliser pour chacun d'eux. Le wsHttpBinding par défaut n'a pas d'adresse. Quelle devrait être l'adresse pour le point de terminaison BasicHttpBinding? Ne devrait pas l'adresse pour le wsHttpBinding être (pour mon exemple) http://localhost/WcfService1/Service1.svc?WCF wsHttpBinding et BasicHttpBinding dans la même application de service WCF

Répondre

16

Il y a deux choses que vous devez considérer ici:

  • si vous hébergez dans IIS (ou WAS dans le cadre de IIS7), vous ne pouvez pas définir une adresse de base - l'adresse de base pour votre service sera le répertoire virtuel où le fichier MyService.svc vit. Vous pouvez toujours définir des adresses relatives, bien que

  • Si vous hébergez vous-même, vous ajouterez généralement des adresses de base dans votre configuration, de sorte que vous pouvez vous éviter d'épeler l'adresse complète tout le temps (mais vous pouvez - si vous souhaitez le faire).

Donc, si vous avez votre MyService.svc dans un répertoire virtuel appelé MyApp sur votre machine localhost, puis utilisez cette config:

<service name="MyService" behaviorConfiguration="Default"> 
    <endpoint 
     address="wsHttp" 
     binding="wsHttpBinding" 
     contract="IMyService" /> 
    <endpoint 
     address="basic" 
     binding="basicHttpBinding" 
     contract="IMyService" /> 
</service> 

alors votre « ancienne » service basicHttp sera accessible à :

http://localhost/MyApp/MyService.svc/basic 

et votre nouveau service axé sur wsHttp sera accessible à:

http://localhost/MyApp/MyService.svc/wsHttp 

Vous pouvez nommer ces adresses relatives (quelque chose après .../MyApp/MyService.svc) comme vous le souhaitez - assurez-vous simplement qu'elles sont différentes les unes des autres.

L'hébergement dans IIS -> emplacement (répertoire virtuel) de votre fichier * .svc devient votre adresse de base.

Si vous auto-host votre service à l'intérieur d'une application de la console ou un service Windows NT, vous obtenez de définir votre base vous adresses:

<services> 
    <service name="MyService" behaviorConfiguration="Default"> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost:8185/Services/" /> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 

Maintenant, dans ce cas, votre "style ancien" service basicHttp sera accessible à:

http://localhost:8185/Services/basic 

et votre nouveau service axé sur wsHttp sera accessible à:

http://localhost:8185/Services/wsHttp 

Vous pouvez définir une adresse de base pour chacun des transports, par ex. un pour http: //, un pour net.tcp: // et ainsi de suite.Bien sûr, si vous le devez vraiment, vous pouvez également définir vos adresses complètes à l'intérieur de votre élément <endpoint> pour chacun des points de service - cela vous donne une flexibilité totale (mais ne fonctionne que dans des scénarios d'auto-hébergement).

Marc

+0

Est-il possible d'avoir votre point de point de terminaison wsHttp dans le répertoire racine et ensuite l'adresse du point d'extrémité basicHttp à la racine \ base? – EbbnFlow

2

Dans WCF vous avez une adresse de base et une adresse enpoint, dans votre cas, vous pouvez faire quelque chose comme ceci:

<service name="WcfEndpoints.Service1" behaviorConfiguration="WcfEndpoints.Service1Behavior"> 
    <!-- Service Endpoints --> 
    <endpoint address="new" binding="wsHttpBinding" contract="WcfEndpoints.IService1" /> 
    <endpoint address="old" binding="basicHttpBinding" contract="WcfEndpoints.IService1" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
</service> 

Notez que vous aurez besoin de travail supplémentaire pour le point final de basicHttpBinding travailler avec les anciens (asmx) clients

http://msdn.microsoft.com/en-us/library/ms751433.aspx

Questions connexes