Самостоятельное размещение ASP.NET Web-Api в качестве службы Windows с контроллерами в другом проекте в рамках решения

У меня есть проект Web-Api с контроллерами и всем необходимым, который я хочу разместить как службу Windows. Я создал новый проект и добавил туда элементы WindowsService и ServiceInstaller, поэтому мое решение выглядит так:

Структура решения

Моя конфигурация:

private HttpSelfHostServer _server;
    private readonly HttpSelfHostConfiguration _config;
    public const string ServiceAddress = "http://localhost:333";

    public WebApiService()
    {
        InitializeComponent();

        _config = new HttpSelfHostConfiguration(ServiceAddress);

        // Set our own assembly resolver where we add the assemblies we need
        CustomAssembliesResolver assemblyResolver = new CustomAssembliesResolver();
        _config.Services.Replace(typeof(IAssembliesResolver), assemblyResolver);

        _config.Routes.MapHttpRoute(
            "Default",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = RouteParameter.Optional });
    }

public class CustomAssembliesResolver : DefaultAssembliesResolver
    {
        public override ICollection<Assembly> GetAssemblies()
        {
            ICollection<Assembly> baseAssemblies = base.GetAssemblies();

            List<Assembly> assemblies = new List<Assembly>(baseAssemblies);

            var controllersAssembly = Assembly.LoadFrom(@"D:\Regula\WebApiService\WebApiService\bin\WebApiService.dll");

            baseAssemblies.Add(controllersAssembly);

            return assemblies;
        }
    }

Я пытался следовать предложениям этого потока, но мне это не помогло - я все еще получаю:

Не найдено ни одного типа, соответствующего контроллеру с именем «Дом».

По сути, я пытаюсь вызвать HomeController, расположенный в проекте WebApiService, из проекта WebApiHost.

Заранее спасибо!


person insomnium_    schedule 19.08.2013    source источник
comment
Код для CustomAssembliesResolver кажется актуальным.   -  person Jodrell    schedule 19.08.2013
comment
Он скопирован/вставлен из темы, которую я указал в своем посте, только с измененным целевым путем сборки.   -  person insomnium_    schedule 19.08.2013


Ответы (1)


MapHttpRoute предназначен только для контроллеров, производных от ApiController. HomeController является производным от Controller, поэтому его нельзя сопоставить таким образом.

person insomnium_    schedule 19.08.2013