WCF service returning 404 on method requests

52,197

Solution 1

I would start by checking a number of things;

  • Permissions on the hosted directory?
  • .Net version is correct?
  • Have you added the certificate to the site?
  • Try putting an image in the same path, can you navigate to that (rule out the odd occasional path mappings)

Good luck!

Solution 2

The first thing I do whenever I hit a 404 with a newly-developed WCF Web Service is checking the handler mapping required to interpret this type of call, because it's often the cause of the issue. There are several ways to work around the problem, many of which require a manual execution of the ServiceModelReg.exe console command: these are undoubtedly valid procedures but might also not work – or create additional problems – if your development machine has a particularly complex configuration. The resolution method I propose below is slightly longer to pull off, but has the advantage of solving the problem more safely and securely.

  • Open the Server Manager interface for machine management, usually present in both the Task Bar and the Start menu.
  • Go to the Dashboard (or Control Panel) and select Add Role or Feature to open the Wizard.
  • Select the Role-based or Feature-based installation type and the server you want to work on, that is, your local / local server.
  • Go to the Features section: Once there, expand the .NET Framework 3.5 Features node and / or the .NET Framework 4.5 Features node, depending on what you have installed: if you have both, you should perform the following step twice (for each one of them).
  • Expand the WCF Services section (if available), then select HTTP Activation (see screenshot below).
  • Continue until you complete the Wizard, then click Install.

enter image description here

Once the installation is complete, you should be able to run your WCF Service without incurring in the 404 error ever again.

For additional info regarding this specific issue and how to fix it, you can also read this post on my blog.

Solution 3

You can implement transport level security using WsHttp bindings. See this article; in your bindings try this biding instead:

<wsHttpBinding>
<binding name="TransportSecurity">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>

The article mentions you should tie up the bindings with the end points.

Solution 4

I had the same problem. From what I read, WCF isnt NT Authenticated authorization (or HTTPContext compatible) by default.

I had to add this to my config file for the WCF service web.config in the section:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

Which you did, plus this:

And on the actual service class definiation I had to add:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class DataService : IDataDeliveryServiceContract

This fixed my problem.

Solution 5

Perhaps in your RouteConfig.cs file add this line:

routes.IgnoreRoute("{resource}.svc/{*pathInfo}");

So long as your .svc file is in the root of the application.

Share:
52,197
Snuffleupagus
Author by

Snuffleupagus

I should probably be doing my job right now.

Updated on January 30, 2021

Comments

  • Snuffleupagus
    Snuffleupagus about 3 years

    I have a WCF service page running only WebGets/WebInvokes over SSL - it works fine on my local machine (self signed cert). On production, however, I can reach service.svc (and it gives me the message about how to consume) but service.svc/AnyRequest returns a 404. Both environments are hosted in IIS 7.5.

    I've enabled tracing and the service isn't even picking up any of the method requests (e.g. service.svc/SomeRequest), however it is processing service.svc just fine. It's also listening at https://computername.domain.net/path/service.svc - is this normal? Should it normally be pointing to https://publicfacing.com/path/service.svc?

    Also note that the production server is hosting multiple sites within IIS.

    Below is the system.serviceModel section of my web.config. The SSLBehave was suggested from here.

      <system.serviceModel>
        <bindings>
          <webHttpBinding>
            <binding name="TransportSecurity">
              <security mode="Transport">
                <transport clientCredentialType="None"></transport>
              </security>
            </binding>
          </webHttpBinding>
        </bindings>
        <behaviors>
          <serviceBehaviors>
            <behavior name="SSLBehave">
              <useRequestHeadersForMetadataAddress>
                <defaultPorts>
                  <add scheme="https" port="443"/>
                </defaultPorts>
              </useRequestHeadersForMetadataAddress>
            </behavior>
          </serviceBehaviors>
          <endpointBehaviors>
            <behavior name="UserManagement.ajaxAspNetAjaxBehavior">
              <webHttp defaultOutgoingResponseFormat="Json" defaultBodyStyle="Wrapped" />
            </behavior>
          </endpointBehaviors>
        </behaviors>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
          multipleSiteBindingsEnabled="true" />
        <services>
          <service name="UserManagement.ajax" behaviorConfiguration="SSLBehave">
            <endpoint address="" behaviorConfiguration="UserManagement.ajaxAspNetAjaxBehavior"
              binding="webHttpBinding" bindingConfiguration="TransportSecurity" contract="UserManagement.ajax" />
          </service>
        </services>
      </system.serviceModel>
    
  • Snuffleupagus
    Snuffleupagus almost 11 years
    Though this did not solve my issue, most of these are the best bet for anyone searching for a solution. Enjoy the bounty. :)
  • MGOwen
    MGOwen over 9 years
    ElatedOwl, if you solved the problem, please post your answer.
  • MGOwen
    MGOwen over 9 years
    To anyone finding this, I had a similar problem, here's my question, complete with the solution: stackoverflow.com/questions/26398049
  • RajeshKdev
    RajeshKdev almost 9 years
    This answer is very helpful when you try to call the WCF Service straight away from MVC App. I was getting 404 - Not Found error for jquery post request. Now resolved, this helped me. :)
  • user3217843
    user3217843 about 7 years
    hey i added tag in WCF.config file and attribute too in the service as u told but still when i am getting error and cross browsing error.
  • vivek.m
    vivek.m over 4 years
    Super helpful. I was tired of exploring everything just to find WCF http activation was disabled. Thanks a ton!!
  • David Norris-Hill
    David Norris-Hill over 4 years
    On Windows 10 I enabled this option by going to: Control Panel > Programs > Turn Windows features on or off > .NET Framework 4.7 Advanced Services > WCF Services > HTTP Activation
  • fdkgfosfskjdlsjdlkfsf
    fdkgfosfskjdlsjdlkfsf over 4 years
    Wanted to share that I was migrating some WCF services from an old server to a new Windows Server 2019 server and this fixed the issue. Before this I was getting error HTTP Error 404.0 when calling the WCF.