2012-03-09 2 views
7

Я хотел попробовать this пример самообслуживания webservice (изначально написанного в WCF WebApi), но с использованием нового ASP.NET WebAPI (который является потомком WCF WebApi).Что такое эквивалент HttpServiceHost в ASP.NET WebAPI?

using System; 
using System.Net.Http; 
using System.ServiceModel; 
using System.ServiceModel.Web; 
using System.Text; 
using Microsoft.ApplicationServer.Http; 

namespace SampleApi { 
    class Program { 
     static void Main(string[] args) { 
      var host = new HttpServiceHost(typeof (ApiService), "http://localhost:9000"); 
      host.Open(); 
      Console.WriteLine("Browse to http://localhost:9000"); 
      Console.Read(); 
     } 
    } 

    [ServiceContract] 
    public class ApiService {  
     [WebGet(UriTemplate = "")] 
     public HttpResponseMessage GetHome() { 
      return new HttpResponseMessage() { 
       Content = new StringContent("Welcome Home", Encoding.UTF8, "text/plain") 
      };  
     } 
    }  
} 

Однако, как я не NuGotten правильный пакет, или HttpServiceHost является самоволку. (Я выбрал вариант «собственный хостинг»).

Что мне не хватает?

+0

[This] (http://code.msdn.microsoft.com/ASPNET-Web-API-Self-Host-30abca12/view/Reviews) помог мне получить что-то работающее, но это не похоже строгого эквивалента. – Benjol

ответ

10

Пожалуйста, обратитесь к этой статье для самостоятельного хостинга:

Self-Host a Web API (C#)

Полного код переписаны для примера будет выглядеть следующим образом:

class Program { 

    static void Main(string[] args) { 

     var config = new HttpSelfHostConfiguration("http://localhost:9000"); 

     config.Routes.MapHttpRoute(
      "API Default", "api/{controller}/{id}", 
      new { id = RouteParameter.Optional } 
     ); 

     using (HttpSelfHostServer server = new HttpSelfHostServer(config)) { 

      server.OpenAsync().Wait(); 

      Console.WriteLine("Browse to http://localhost:9000/api/service"); 
      Console.WriteLine("Press Enter to quit."); 

      Console.ReadLine(); 
     } 

    } 
} 

public class ServiceController : ApiController {  

    public HttpResponseMessage GetHome() { 

     return new HttpResponseMessage() { 

      Content = new StringContent("Welcome Home", Encoding.UTF8, "text/plain") 
     };  
    } 
} 

Надеется, что это помогает.