Что является эквивалентом HttpServiceHost в ASP.NET WebAPI? - PullRequest
7 голосов
/ 09 марта 2012

Я хотел попробовать этот пример автономного веб-сервиса (изначально написанного в WCF WebApi), но с использованием нового ASP.NET WebAPI (который является потомком WCF 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 - AWOL. (Я выбрал вариант «самостоятельного хостинга»).

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

1 Ответ

10 голосов
/ 09 марта 2012

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

Самостоятельное размещение веб-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")
        };    
    }
}

Надеюсь, это поможет.

...