Данная статья показывает, как можно организовать обработку HTTP-запросов на 1С, используя .Net framework. Пример показан на основе компонента Elisy .Net Bridge, который распространяется для разработчиков бесплатно.
.Net framework предлагает своим разработчикам класс HttpListener, отвечающий за прослушивание http-протокола. Используя HttpListener, вы можете создать прослушивание http-протокола, которое отвечает на http-запросы. Вы можете использовать этот класс только на операционных системах Windows XP SP2 или Windows Server 2003. Попытка использования класса на более ранних системах вызовет исключение.
Ниже приведен пример для 1С, который инициализирует объект типа HttpListener, настраивая его на прослушивание всех URL по порту 8080. При запуске в 1С работа программы приостанавливается, пока не последует запрос на порт, например, из браузера. Как только вы пошлете из браузера запрос, например, http://127.0.0.1:8080/ 1С вернет описанную в программе html-строку.
Это самый простой пример. При желании можно его усложнить, поставив обработку запросов в цикле, тем самым получив настоящий HTTP-сервер.
AttachAddIn("AddIn.ElisyNetBridge");
AddIn = New("AddIn.ElisyNetBridge");
net = AddIn.New("Elisy.NetBridge", "Elisy.ElisyNetBridge");
Если НЕ net.GetStatic("System.Net.HttpListener","IsSupported") Тогда
Сообщить("Для использования класса HttpListener нужна Windows XP SP2 или Server 2003.");
Возврат;
КонецЕсли;
listener = net.New("System.Net.HttpListener");
listener.Prefixes.Add("http://*:8080/");
listener.Start();
Сообщить("Прослушивание...");
//Метод GetContext блокирует пока ждет запрос.
context = listener.GetContext();
request = context.Request;
// Получить объект ответа
response = context.Response;
// Создать ответ - HTML-строку
responseString = "<html><head><title>Ответ от
HttpListener</title><meta http-equiv="content-type"
content="text/html; charset=utf-8"
/></head><body>Посетите <a href="http://www.1centerprise.com">1centerprise.com</a></body></html>";
buffer = net.GetStatic("System.Text.Encoding", "UTF8").GetBytes(responseString);
// Получить поток ответа и записать ответ в него.
response.ContentLength64 = buffer.Length;
output = response.OutputStream;
output.Write(buffer,0,buffer.Length);
// Необходимо закрыть выходной поток.
output.Close();
listener.Stop();