2009-07-02 4 views
2

J'ai un service WCF qui fonctionne sur ma machine de développement exécutant IIS 7, mais mon collègue exécute IIS 5.1 (XP). Il peut voir le service dans un navigateur Web lorsqu'il navigue vers la page de service, mais s'il tente d'appeler une opération ou d'y accéder dans son navigateur Web, il obtient une erreur 404. Je lui ai fait exécuter ServiceModelReg -i, mais cela n'a rien changé. Je l'ai fait naviguer sur la page .svc? Wsdl et la méthode y est listée. Mais quand il essaie de naviguer vers la méthode (il utilise WebGetAttribute) IIS renvoie 404. Des idées?Fonctionnement du service WCF - GET échoue avec 404

Mise à jour

Le problème ne se produit que s'il est en cours d'exécution sur le site à partir de IIS. S'il charge le projet à l'aide du serveur Web Visual Studio (cassini), cela fonctionne correctement.

Je ne pense pas que le problème est avec le service lui-même, mais juste au cas où il est ici:

[ServiceContract] 
public interface IPFDClientAuthentication { 
    [OperationContract] 
    [WebGet(UriTemplate="/Logon?username={username}&password={password}", 
     BodyStyle=WebMessageBodyStyle.WrappedResponse, 
     ResponseFormat=WebMessageFormat.Json)] 
    [JSONPBehavior(callback="callback")] 
    bool Logon(string username, string password); 

    [OperationContract] 
    [WebGet(UriTemplate = "/Logout", 
     BodyStyle = WebMessageBodyStyle.WrappedResponse, 
     ResponseFormat = WebMessageFormat.Json)] 
    [JSONPBehavior(callback = "callback")] 
    bool Logout(); 

    [OperationContract] 
    [WebGet(UriTemplate="/GetIdentityToken", 
     BodyStyle=WebMessageBodyStyle.WrappedRequest, 
     ResponseFormat=WebMessageFormat.Json)] 
    [JSONPBehavior(callback= "callback")] 
    string GetIdentityToken(); 
} 

Voici le web.config:

<system.serviceModel> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
<services> 
    <service behaviorConfiguration="PFD.AuthenticationService.PFDClientAuthenticationBehavior" 
        name="PFD.AuthenticationService.PFDClientAuthentication"> 
     <endpoint address="" behaviorConfiguration="PFD.AuthenticationService.PFDClientEndpointBehavior" 
         binding="customBinding" bindingConfiguration="clientBinding" 
         name="clientEndpoint" contract="PFD.AuthenticationService.IPFDClientAuthentication"> 
      <identity> 
       <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
</services> 
<bindings> 
    <customBinding> 
     <binding name="clientBinding"> 
      <jsonpMessageEncoding/> 
      <httpTransport manualAddressing="true"/> 
     </binding> 
    </customBinding> 
</bindings> 
<behaviors> 
    <endpointBehaviors> 
     <behavior name="PFD.AuthenticationService.PFDClientEndpointBehavior"> 
      <webHttp /> 
     </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
     <behavior name="PFD.AuthenticationService.PFDClientAuthenticationBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 
<extensions> 
    <bindingElementExtensions> 
     <add name="jsonpMessageEncoding" type="Microsoft.Ajax.Samples.JsonpBindingExtension, 
       PFD.Services, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
    </bindingElementExtensions> 
</extensions> 

Répondre

1

Ajouter un mappage générique dans IIS sur la machine XP. Mappez *.* vers C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll et décochez la case "Vérifier le fichier existant".

Selon le format de vos urls REST, vous devrez peut-être mettre .* au lieu de *.* (faire vos URL ressemblent à des répertoires ou comme fichiers?)

+0

Merci, mon collègue est sorti pour le moment, donc je ne peux pas vraiment vérifier le correctif, mais je pense que vous avez raison. J'ai oublié les cartes de script. –

+1

Je dois demander, puisque j'ai le même problème. Avez-vous vérifié que c'est la réponse, ou l'avez-vous marquée comme la réponse en supposant que cela fonctionnerait? –

0

Essayez d'ajouter /soap à la fin de l'URL du service.

Questions connexes