2009-07-02 9 views
2

Ich habe einen WCF-Dienst, der auf meinem Dev-Computer mit IIS 7 funktioniert, aber mein Kollege führt IIS 5.1 (XP) aus. Er kann den Dienst in einem Webbrowser anzeigen, wenn er zur Dienstseite navigiert. Wenn er jedoch versucht, eine Operation aufzurufen oder in seinem Webbrowser dazu zu navigieren, wird ein 404-Fehler angezeigt.WCF-Dienstoperation - GET schlägt mit 404 fehl

Ich hatte ihn ServiceModelReg -i laufen lassen, aber das änderte nichts. Ich ließ ihn zur .svc? Wsdl Seite navigieren und die Methode wird dort aufgeführt. Aber wenn er versucht, zu der Methode zu navigieren (er verwendet das WebGetAttribute), gibt IIS 404 zurück. Irgendwelche Ideen?

aktualisieren

Das Problem tritt nur auf, wenn er die Website von IIS ausgeführt wird. Wenn er das Projekt mit dem Visual Studio Web Server (Cassini) lädt, funktioniert es einwandfrei.

Ich glaube nicht, das Problem ist mit dem Service selbst, sondern nur für den Fall hier ist es:

[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(); 
} 

Hier ist die 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> 

Antwort

1

hinzufügen eine Wildcard-Zuordnung in IIS auf dem XP-Rechner. Karte *.* zu C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll und deaktivieren Sie das Kontrollkästchen "Verify File Exists".

Je nach Format der REST-URLs, die Sie benötigen .* statt *.* (machen Sie Ihre URLs wie Verzeichnisse aussehen oder wie Dateien?) Setzen

+0

Danke, mein Kollege ist im Moment out, also kann ich den Fehler nicht wirklich überprüfen, aber ich denke, Sie haben Recht. Ich habe Script Maps vergessen. –

+1

muss ich fragen, da ich das gleiche Problem habe. Haben Sie nachgeprüft, dass dies die Antwort ist, oder haben Sie es als die Antwort markiert, unter der Annahme, dass es funktionieren würde? –

0

Try /soap am Ende der Service-URL hinzufügen.