2009-06-08 8 views
0

Je suis en train d'écrire un service WCF RESTful en C# en utilisant VS 2005. J'héberge le service via IIS et je peux naviguer vers le fichier .svc, mais chaque fois que j'essaie de naviguer vers l'un des URI je reçois une erreur 404 Si je cours le wcftestclient (inclus avec VS 2008) alors je suis capable de voir les méthodes, donc je sais que le service fonctionne. Le problème semble être avec la partie REST de l'implémentation.Hébergement RESTful WCF dans IIS

Ceci est mon web.config:

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
    <services> 
     <service behaviorConfiguration="ServiceBehavior" name="MyAPI"> 
     <endpoint binding="webHttpBinding" contract="IExternalAPI"/> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
     </service> 
    </services> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="ServiceBehavior"> 
      <webHttp/> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior name="ServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

C'est le contrat:

[ServiceContract()] 
    interface IExternalAPI { 
    [OperationContract] 
    [WebGet (BodyStyle=WebMessageBodyStyle.Bare,ResponseFormat=WebMessageFormat.Json,UriTemplate="{APIKey}/Favorites/{userId}")] 
    string GetFavoritesList(string APIKey, string userId); 

    [OperationContract] 
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, UriTemplate = "{APIKey}/Addresses/{userId}")] 
    string GetAddressList(string APIKey, string userId); 

    [OperationContract] 
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, UriTemplate = "{APIKey}/Authenticate/{userName}/{password}")] 
    string Authenticate(string APIKey, string username, string password); 

    [OperationContract] 
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, UriTemplate = "{APIKey}/Checkout/{orderId}/{userId}/{tip}/{addressId}")] 
    string Checkout(string APIKey, string orderId, string userId, string tip, string addressId); 

    [OperationContract] 
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, UriTemplate = "{APIKey}/AddToOrder/{templateId}/{userId}")] 
    string AddFavoriteToOrder(string APIKey, string templateId, string userId); 

    [OperationContract] 
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, UriTemplate = "{APIKey}/Pending/{userId}")] 
    string GetPendingOrders(string APIKey, string userId); 

    [OperationContract] 
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, UriTemplate = "Bob")] 
    string TestMethod(); 
    } 

Toute aide serait grandement appréciée.

+0

Quelles versions de logiciel utilisez-vous? –

+0

Dans quelle URI naviguez-vous? Pouvez-vous nous donner un échantillon? –

+0

Les URIs sont des choses comme http: //localhost/MemberServices/MemberServices.svc/Bob http: //localhost/MemberServices/MemberServices.svc/1234/Favorites/567 Je courais VS 2005 avec tous les packs de services , IIS 5.1 et avez .NET 3.5 –

Répondre

2

Je sais que c'est 4 mois après votre publication, mais je suis engagé dans une situation similaire. Ma config semble presque identique à la vôtre, et j'avais le même problème jusqu'à ce que j'ajoute la clé endpointBehavior. Essayez de spécifier dans votre point de terminaison de service une référence explicite à votre comportement de point de terminaison. Peut-être que cela va aider.

<service behaviorConfiguration="ServiceBehavior" name="MyAPI"> 
    <endpoint binding="webHttpBinding" behaviorConfiguration="ServiceBehavior" contract="IExternalAPI"/> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
</service> 
Questions connexes