2010-07-19 7 views
0

Est-il possible d'utiliser le nouveau serice de routage WCF dans WCF 4 pour les services basés sur REST? J'ai quelque chose de similaire à un proxy inverse en tête. Fondamentalement, j'ai un certain nombre de serivces repos reposés auto que je veux exposer via IIS avec la même URL de base et le port. Le routage doit être fait par la dernière partie de l'URL. Je suis absolument nouveau à ce service de routage WCF, alors pardonnez-moi si c'est une question idiote, mais je n'ai pas trouvé d'informations à ce sujet sur le web..net 4 Service de routage WCF + REST

J'ai essayé quelque chose comme ça (où serivce1/2 sont les services selfhosted):

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="RoutingBehavior"> 
       <routing routeOnHeadersOnly="false" filterTableName="RoutingTable"/> 
       <serviceDebug includeExceptionDetailInFaults="true"/> 
       <serviceMetadata httpGetEnabled="true"/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service behaviorConfiguration="RoutingBehavior" name="System.ServiceModel.Routing.RoutingService"> 
      <endpoint address="myservices" contract="System.ServiceModel.Routing.IRequestReplyRouter" binding="basicHttpBinding"/> 
     </service> 
    </services> 
    <routing> 
     <filterTables> 
      <filterTable name="RoutingTable"> 
       <add filterName="service1Filter" priority="0" endpointName="service1"/> 
       <add filterName="service2Filter" priority="0" endpointName="service2"/> 
      </filterTable> 
     </filterTables> 
     <filters> 
      <filter name="service1Filter" filterType="MatchAll"/> 
      <filter name="service2Filter" filterType="MatchAll"/> 
     </filters> 
    </routing> 
    <client> 
     <endpoint address="http://somehost:8888/test/service1" binding="basicHttpBinding" contract="*" name="service1"/> 
     <endpoint address="http://somehost:8732/test/service2" binding="basicHttpBinding" contract="*" name="service2"/> 
    </client> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/> 
</system.serviceModel> 

mais cela ne semble pas fonctionner. J'obtiens une exception non trouvée. http://somehost:8888/test/service1 est l'adresse de base du service auto-hébergé et non le point de terminaison réel. Puis-je effectuer le routage en fonction de l'adresse de base ou (si le routage de repos est possible) dois-je ajouter un itinéraire pour chaque point de terminaison?

+0

Je pense que ce serait probablement une mauvaise utilisation du service de routage WCF. Je vais utiliser un "vrai" proxy inverse comme ARR. – Jeldrik

Répondre

1

J'ai résolu le problème en utilisant un proxy inverse (dans mon cas arr). Je ne sais pas si l'utilisation du service de routage WCF à cette fin est possible, mais c'est probablement une mauvaise utilisation.

+0

Pour élaborer un peu sur ce bon conseil, j'ai dû installer l'extension ARR, puis activer proxy dans iis pour autoriser les réécrits d'url à d'autres hôtes, puis créer la règle de réécriture dans mon service de routage wcf web.config et html droites sont traitées de manière transparente. Pour un contenu Web moins trivial que le mien, certaines règles de sortie seraient probablement nécessaires. – LOAS

1

Le service de routage est uniquement disponible pour les demandes SOAP. Pour utiliser le routage avec WCF RESTful, vous devez configurer vos itinéraires en utilisant System.Web.Routing similaire au routage MVC.

Questions connexes