2013-08-19 29 views
1

我有一個Web-Api項目,包含控制器和所有必需的東西,我想作爲Windows服務託管。 我創建新項目,並添加有一個WindowsServiceServiceInstaller項目,所以我的解決辦法是這樣的:自我託管ASP.NET Web-API作爲Windows服務與解決方案中的不同項目中的控制器

Solution structure

我的配置是:

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; 
     } 
    } 

我試圖按照this thread suggestions,但它並沒有幫助我 - 我仍然得到:

沒有發現類型匹配名爲'Home'的控制器。

基本上,我試圖調用HomeController 位於WebApiService項目從WebApiHost項目。

在此先感謝!

+0

「CustomAssembliesResolver」的代碼似乎相關。 – Jodrell

+0

它是從我在帖子中指定的帖子複製/粘貼的,只是改變了目標程序集路徑。 –

回答

0

MapHttpRoute僅適用於控制器,僅從ApiController派生。 HomeController源自Controller,因此無法以此方式進行映射。

相關問題