Можно ли создать отдельную веб-службу C #, развернутую как служба EXE или Windows? - PullRequest
19 голосов
/ 18 июня 2009

Можно ли создать C # EXE или службу Windows, которая может обрабатывать запросы веб-службы? Очевидно, что какой-то встроенный, возможно, ограниченный, веб-сервер должен быть частью EXE / службы. EXE / служба не должна полагаться на установку IIS. Предпочтительно, чтобы встроенный веб-сервис мог обрабатывать соединения типа HTTPS / SSL.

Сценарий таков: клиент хочет установить небольшой агент (службу Windows) на свои корпоративные машины. У агента будут две основные задачи: 1) отслеживать систему с течением времени и собирать определенные фрагменты данных и 2) отвечать на запросы веб-службы (все еще ведутся торги с SOAP -v- REST) ​​для сбора данных или изменения системы. Клиенту нравится идея API веб-сервисов, чтобы можно было написать любое количество клиентов (на любом языке) для подключения к различным агентам, работающим на корпоративных машинах. Они хотят, чтобы установка была относительно безболезненной (установка .NET, некоторые сборки, служба, изменение брандмауэра Windows, запуск службы) без необходимости установки и настройки IIS.

Я знаю, что могу сделать это с Delphi. Но клиент предпочел бы сделать это в C #, если это возможно.

Есть предложения?

Ответы [ 6 ]

13 голосов
/ 18 июня 2009

Да, возможно, вы можете захотеть взглянуть на WCF и Self Hosting .

5 голосов
/ 18 июня 2009

Да, это возможно (и довольно легко).

Вот статья CodeProject , показывающая, как создать базовый HTTP-сервер в C #. Его можно легко поместить в автономный EXE-файл или службу и использовать в качестве веб-службы.

3 голосов
/ 18 июня 2009

Одна технология, которую вы можете попробовать - это WCF. В WCF может быть немного сложно попасть, но на DNRTV есть отличная телепередача Кейта Элдера, которая показывает, как начать работу с WCF очень просто.

http://www.dnrtv.com/default.aspx?showNum=135

1 голос
/ 18 июня 2009

Конечно, вы можете сделать это. Обязательно измените Тип вывода проекта на Консольное приложение. Затем в вашей функции Main добавьте параметр string []. Выключив какой-либо переключатель, полученный в командной строке, вы можете перейти на ServiceBase.Run для запуска в качестве службы Windows или на другой код для запуска консольного приложения.

1 голос
/ 18 июня 2009

Я очень рекомендую WCF. Это очень хорошо вписывается в продукт, который вы описываете. Доступно большое количество книг .

1 голос
/ 18 июня 2009

Вы можете взглянуть на HttpListener в .Net Framework.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...