MVC2 Routing with WCF ServiceRoute: Html.ActionLink отображает неверные ссылки!

У меня есть сервис WCF, который живет бок о бок с веб-сайтом MVC2. Я хотел бы, чтобы мой URL для службы выглядел так:

http://localhost/projdir/Service

Сайт MVC находится в зачаточном состоянии, поэтому у него все еще есть свои стандартные контроллеры и т. Д.

Следующий код работает на первый взгляд в global.asax:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.Add(new ServiceRoute("Service", new ServiceHostFactory(), 
               typeof(MyService)));

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", 
              id = UrlParameter.Optional } // Parameter defaults
    );
}

Сервис появляется именно там, где я описал и работает как рекламируется. Отлично.

Тем не менее, я только что заметил, что порядок моего кода таким образом меняет все моиActionLink«S. Например, вкладка «О программе» на сайте MVC теперь выглядит так:

http://localhost/projdir/Service?action=About&controller=Home

Это явно неверно (должно бытьhttp://localhost/projdir/Home/About/ ).

Если я переедуServiceRoute сложение ниже значения по умолчаниюMapRoute() позвоните, тогда я получаю ошибку пропавшего контроллера. (На самом деле я получаю сообщение «StructureMapControllerFactory не вернул экземпляр контроллера», потому что я подключен к StructureMap, да, это не контроллер с самого начала.)

Интересно, что это только влияет на результатHtml.ActionLink(), Я могу ввести вручнуюhttp://localhost/projdir/Home/About/ и попасть на правильную страницу.

Какую ужасно очевидную ошибку новичка я делаю?

Ответы на вопрос(3)

Ваш ответ на вопрос