Как разместить простой веб-интерфейс ASP.NET в Windows Services

Для простого устройства, которое работает на Windows и операционной системе.NET, мы должны создать простой веб-интерфейс конфигурации для управления ею. Точно так же, как страница конфигурации Вашего маршрутизатора, ничто более сложное, чем это.

Установки IIS или любого другого веб-сервера нужно избежать, в чем мы нуждаемся, сам поддерживающий процесс в сервисе окон на основную установку Windows XP +.NET.

Моно совместимость плюс.

Миллион благодарностей

5
задан 13 July 2010 в 09:37
поделиться

5 ответов

На самом деле самый простой способ - использовать встроенный материал WCF (.Net 3.5) ... Для этого вы создаете интерфейс для своей службы 'WCF', который содержит один или несколько методов которые возвращают Stream:

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebInvoke(UriTemplate = "/{*arguments}", Method="GET", BodyStyle=WebMessageBodyStyle.Bare)]
    Stream Get(string arguments);
}

Вы можете определить несколько методов и аргументов и позволить WFC выполнить работу или, как в примере выше, поместить все в один метод. Результирующая реализация может получить доступ к полному Uri и параметрам запроса следующим образом:

public class ServiceType : IService
{
    public Stream Get(string arguments)
    {
        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("<html><head><title>Hello</title></head><body>");
        response.Write("<b>Path</b>: {0}<br/>", arguments);
        response.Write("<b>RequestUri</b>: {0}<br/>", uriInfo.RequestUri);
        response.Write("<b>QueryParameters</b>: {0}<br/>", uriInfo.QueryParameters.ToString());
        response.Write("</body></html>");
        response.Flush();

        rawResponse.Position = 0;
        return rawResponse;
    }
}

Теперь все, что вам нужно сделать, это запустить WCF web / http self-host ...

static void Main()
{
    Uri baseAddress = new Uri("http://localhost:8000/");
    WebServiceHost svcHost = new WebServiceHost(typeof(ServiceType));

    ServiceEndpoint svcEndpoint = svcHost.AddServiceEndpoint(typeof(IService),
      new WebHttpBinding(), baseAddress);
    svcEndpoint.Behaviors.Add(new WebHttpBehavior());

    svcHost.Open();
    Console.WriteLine("Press enter to quit...");
    Console.ReadLine();

    svcHost.Close();
}

ПРИМЕЧАНИЕ: чтобы приведенный выше пример работал в Vista / Win7 вам необходимо предоставить разрешения с помощью следующей командной строки:

netsh http add urlacl url=http://+:8000/ user=DOMAIN\USER
10
ответ дан 18 December 2019 в 08:26
поделиться

Вы можете использовать UtilDev Cassini с вашей службой windows. Он основан на оригинальном MS casini, который встроен в visual studio и является бесплатным и распространяемым.

1
ответ дан 18 December 2019 в 08:26
поделиться

Если вы использовали Windows 7, вы могли бы использовать функцию Hostable Web Core IIS7 для размещения подмножества IIS внутри вашей службы без установки самого IIS7.

Вам нужен встроенный веб-сервер. Хотя вы можете написать свой собственный, я предлагаю вам проверить C # WebServer , встроенный веб-сервер, написанный на C #.

1
ответ дан 18 December 2019 в 08:26
поделиться

Вы можете разместить среду выполнения ASP.Net в своем собственном процессе. У Рика Страла есть старая статья об этом под названием « Использование среды выполнения ASP.Net для расширения настольных приложений с помощью динамических сценариев HTML ».

Он должен нормально работать в Windows XP, .Net 2.0 и выше. Если вы объедините это с кодом WCF в ответе @ csharptest.net, вы сможете использовать возможности страниц ASP.Net и иметь для этого конечную точку.

3
ответ дан 18 December 2019 в 08:26
поделиться

Если вам нужны простые решения, я предлагаю вам попробовать Kayak .

С сайта:

Kayak - это простой веб-сервер. Это слушает соединения, создает представление запросов в памяти, и позволяет легко создавать ответы. Его можно использовать на любом C # программа. Ваш код загружает каяк в его производственное пространство, а не наоборот вокруг!

Также хорошо работает с моно. Дать ему шанс! :)

Обновление

Вы также можете попробовать aspnet serve

3
ответ дан 18 December 2019 в 08:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: