Для простого устройства, которое работает на Windows и операционной системе.NET, мы должны создать простой веб-интерфейс конфигурации для управления ею. Точно так же, как страница конфигурации Вашего маршрутизатора, ничто более сложное, чем это.
Установки IIS или любого другого веб-сервера нужно избежать, в чем мы нуждаемся, сам поддерживающий процесс в сервисе окон на основную установку Windows XP +.NET.
Моно совместимость плюс.
Миллион благодарностей
На самом деле самый простой способ - использовать встроенный материал 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
Вы можете использовать UtilDev Cassini с вашей службой windows. Он основан на оригинальном MS casini, который встроен в visual studio и является бесплатным и распространяемым.
Если вы использовали Windows 7, вы могли бы использовать функцию Hostable Web Core IIS7 для размещения подмножества IIS внутри вашей службы без установки самого IIS7.
Вам нужен встроенный веб-сервер. Хотя вы можете написать свой собственный, я предлагаю вам проверить C # WebServer , встроенный веб-сервер, написанный на C #.
Вы можете разместить среду выполнения ASP.Net в своем собственном процессе. У Рика Страла есть старая статья об этом под названием « Использование среды выполнения ASP.Net для расширения настольных приложений с помощью динамических сценариев HTML ».
Он должен нормально работать в Windows XP, .Net 2.0 и выше. Если вы объедините это с кодом WCF в ответе @ csharptest.net, вы сможете использовать возможности страниц ASP.Net и иметь для этого конечную точку.
Если вам нужны простые решения, я предлагаю вам попробовать Kayak .
С сайта:
Kayak - это простой веб-сервер. Это слушает соединения, создает представление запросов в памяти, и позволяет легко создавать ответы. Его можно использовать на любом C # программа. Ваш код загружает каяк в его производственное пространство, а не наоборот вокруг!
Также хорошо работает с моно. Дать ему шанс! :)
Вы также можете попробовать aspnet serve