2012-03-09 9 views
7

Quería probar this ejemplo de un servicio web alojado en sí mismo (originalmente escrito en WCF WebApi), pero utilizando el nuevo ASP.NET WebAPI (que es el descendiente de WCF WebApi).¿Cuál es el equivalente de HttpServiceHost en 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") 
      };  
     } 
    }  
} 

Sin embargo, ya sea que no he NuGotten el paquete adecuado, o HttpServiceHost está ausente sin permiso. (Elegí la variante 'autohospedaje').

¿Qué me estoy perdiendo?

+0

[Este] (http://code.msdn.microsoft.com/ASPNET-Web-API-Self-Host-30abca12/view/Reviews) me ha ayudado a conseguir algo que funciona, pero no se ve como un estricto equivalente. – Benjol

Respuesta

10

Por favor refiérase a este artículo para autoalojamiento:

Self-Host a Web API (C#)

El código reescrito completa para su ejemplo sería el siguiente:

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

Espero que esto ayude.

Cuestiones relacionadas