Topic Map tab pops up a dialog containing a 404 Not Found Error

Top  Previous  Next

Symptom

The AJAX classification editor on the topic map tab uses a web service published by the TMCore EPiServer Module to access information about the topic map. The service is located in: /NetworkedPlanet/EPiServerModule/Service/TMCoreEPiDataService.asmx.

Fix

In Windows Server 2003 SP2 running EPiServer 6 it is possible for the EPiServer manager to incorrectly assign the handlers for ASMX files. This means that if you point your web browser at the ASMX service, you will be able to see a service description, and see individual method descriptions; however if the Invoke button is clicked on an operation then a 404 Not Found error is returned.

(Note that you may have to enable HttpGet and HttpPost for the service, see the section Allow HttpPost to web service)

To fix this, ensure that the ASMX extension is mapped to the the ISAPI handler correctly using IIS 6 Manager. If this doesn't fix the problem, then it is probable that you need to add the following handler in to global.asax:

<%@ Application Language="C#" Inherits="EPiServer.Global" %>

<script RunAt="server">

    protected void Application_BeginRequest(object sender, EventArgs e)

    {

        System.Web.HttpApplication app = (System.Web.HttpApplication) sender;

        System.Web.HttpContext context = app.Context;

        string path = context.Request.Path;

        int asmxPosition = path.IndexOf(".asmx/", StringComparison.OrdinalIgnoreCase);

        if (asmxPosition >= 0)

        {

            context.RewritePath(

                path.Substring(0, asmxPosition + 5),

                path.Substring(asmxPosition + 5),

                context.Request.QueryString.ToString());

        }

    }

</script>

This handler detects that an asmx file has been invoked, and puts the operation name (everything after the .asmx/ part of the path) back in to pathinfo. The code listing above shows the entire contents of global.asax. If you have your own methods in global.asax or have a code-behind global.asax.cs then take care not to disable or clash with existing modifications to this class.