2010-08-24 11 views
0

J'envisage d'accueillir WCF Rest service que j'ai construit sur IIS 7. L'URL pour accéder à mon service sera quelque chose commeWCF REST avec une URL propre

api.mycompany.com/applicationName/ Service.svc/utilisateurs/1347

récemment, je cherchais une certaine implémentation de l'API REST avec une URL propre comme Yahoo API

social.yahooapis.com/v1/user/{guid}/ contacts

Je me demande quel sera le meilleur environnement hôte WCF (par ex. Service Windows) ou toute autre solution (par exemple, le module de réécriture d'URL) étant donné que je ne veux pas avoir le nom de l'application et .svc dans mon URL afin que je puisse avoir une URL complètement propre pour mon API REST

Répondre

0

Vous pouvez utiliser UriTemplate Class également regarder dans le kit de démarrage WCF Rest.

Here est une bonne explication.

1

Vous pouvez utiliser le nouveau modèle WebApi dans .NET 4 qui vous permet de spécifier l'itinéraire dans global.asax. Cela supprime complètement le fichier svc. Vous devez avoir AspNetCompatilbityMode = true. Voir l'exemple ci-dessous:

[ServiceContract] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
public class RestService 
{ 
    // TODO: Implement the collection resource that will contain the SampleItem instances 

    private static List<SampleItem> sampleCollection = new List<SampleItem>(); 

    [WebGet] 
    public List<SampleItem> GetCollection() 
    { 
     // TODO: Replace the current implementation to return a collection of SampleItem instances 
     if (sampleCollection.Count == 0) 
     { 
      sampleCollection = new List<SampleItem>(); 
      sampleCollection.Add(new SampleItem() { Id = 1, StringValue = "Hello 1" }); 
      sampleCollection.Add(new SampleItem() { Id = 2, StringValue = "Hello 2" }); 
      sampleCollection.Add(new SampleItem() { Id = 3, StringValue = "Hello 3" }); 
      sampleCollection.Add(new SampleItem() { Id = 4, StringValue = "Hello 4" }); 
      sampleCollection.Add(new SampleItem() { Id = 5, StringValue = "Hello 5" }); 
     } 
     return sampleCollection; 
    } 
} 

Vous web.config aura Teh suivantes:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    </modules> 
    </system.webServer> 
<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
    <standardEndpoints> 
     <webHttpEndpoint> 
     <!-- 
      Configure the WCF REST service base address via the global.asax.cs file and the default endpoint 
      via the attributes on the <standardEndpoint> element below 
     -->   
     <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/> 
     </webHttpEndpoint> 
    </standardEndpoints> 
    </system.serviceModel> 

Et enfin votre Global.asax comme suit:

public class Global : HttpApplication 
{ 
    void Application_Start(object sender, EventArgs e) 
    { 
     RegisterRoutes(); 
    } 

    private void RegisterRoutes() 
    { 
     // Edit the base address of Service1 by replacing the "Service1" string below 
     RouteTable.Routes.Add(new ServiceRoute("RestService", new WebServiceHostFactory(), typeof(RestService))); 
    } 
} 

Maintenant, l'URL de votre service serait:

http://localhost/SampleApp/RestService/GetCollection 

Vous avez maintenant des URL REST propres et correctes