Служба Windows с веб-интерфейсом.NET C#

Мне нужно разработать службу Windows, которая будет выполнять некоторые основные задачи несколько раз в день, ничего особенного. Как часть требований, ему необходим веб-интерфейс, чтобы его можно было настроить из браузера.

Пример:

Мистер Инженер открывает свой браузер и вводит localhost:1234/Config, Возвращается простая html веб-страница, которая позволяет ему вводить некоторые значения и публиковать их на сервере. Служба Windows будет использовать эти новые значения.

В настоящее время у меня есть два разных способа сделать это. Во-первых, просто создав WebServiceHost в моей ServiceBase следующим образом:

// Provide the base address.
serviceHost = new WebServiceHost(typeof(Service), new Uri(baseAddress));

// Open the ServiceHostBase 
serviceHost.Open();

Затем я создаю IService и указываю операцию следующим образом:

[OperationContract]
[WebGet]
Stream Get();

И, наконец, реализовать интерфейс так:

public Stream Get()
{
    UriTemplateMatch uriInfo = WebOperationContext.Current.IncomingRequest.UriTemplateMatch;
    WebOperationContext.Current.OutgoingResponse.ContentType = "text/html";

    MemoryStream rawResponse = new MemoryStream();
    TextWriter response = new StreamWriter(rawResponse, Encoding.UTF8);
    response.Write("<h1>test</h1>");
    response.Flush();

    rawResponse.Position = 0;
    return rawResponse;
}

Это работает FINE. Я могу запросить веб-сервис из моего браузера и получаю желаемый результат.

Однако недавно я наткнулся на WebApi и смог повторить такой же успех, выполнив следующие действия:

HttpSelfHostConfiguration config = new HttpSelfHostConfiguration(new Uri("http://localhost:50231/"));

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional });

// Create server
var server = new HttpSelfHostServer(config);

// Start listening
server.OpenAsync().Wait();

И затем, имея контроллер, например, так:

public class HelloController : ApiController
{
    public HttpResponseMessage Get()
    {
        var response = new HttpResponseMessage();
        response.Content = new StringContent("<html><body>Hello World</body></html>");
        response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
        return response;
    }
}

Итак, вот два метода, которые я придумала для удовлетворения требований. Какой из них считается лучше? Или они оба ужасные и есть лучший способ?

0 ответов

Другие вопросы по тегам