Проблемы с междоменным взаимодействием 1С и Web API

Добрый день.
Подскажите, мы подключались к веб-сервису из 1С через HTTP запрос. При выполнении запроса “Login”, сервер нам возвращал Set-Cookie, которые в последующем передавали с запросом и получали данные показаний счетчиков.
После обновления до R15.08, сервер не возвращает Set-Cookie при выполнении запроса “Login”. Что изменилось в механизме авторизации, как нам изменить запрос для правильной авторизации?

Запрос авторизации в 1С:

Соединение = Новый HTTPСоединение(“lerstest”,80,“ЛОГИН”,“ПАРОЛЬ”,30);

Запрос = Новый HTTPЗапрос("/api.asmx/Login");

Запрос.Заголовки.Вставить(“POST”, “/api.asmx/Login HTTP/1.1”);
Запрос.Заголовки.Вставить(“Host”, “lerstest”);
Запрос.Заголовки.Вставить(“Content-Type”, “application/x-www-form-urlencoded”);

ТекстТелаЗапроса = “userName=admin&password=admin”;
Запрос.УстановитьТелоИзСтроки(ТекстТелаЗапроса,КодировкаТекста.UTF8);

ОтветАвторизации = Соединение.ОтправитьДляОбработки(Запрос);
ТекстОтвета = ОтветАвторизации.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);

Set_Cookie = ОтветАвторизации.Заголовки.Получить(“Set-Cookie”); //- здесь возвращался кэш сеанса.

После обновления, в тексте ответа приходит описание ошибки: “Формат запроса не распознан из-за того, что URL неожиданно закончился на “/Login””

Уточнение.
При подключении локально на сервере, все отрабатывает нормально. При подключении с другого компьютера в сети, ошибка, но через браузер, доступ к Веб-сервису есть.

Попробуйте добавить в c:Program FilesLERSWebHeader.config

<?xml version="1.0"?>
<!-- Заголовки ответов HTTP -->
<httpProtocol>
    <customHeaders>
	    <add name="Access-Control-Allow-Credentials" value="true"/>
            <add name="Access-Control-Allow-Origin" value="http://localhost:58035" /> 
            <add name="Access-Control-Allow-Headers" value="Content-Type, *" />
            <add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS" />
    </customHeaders>
</httpProtocol>

Access-Control-Allow-Credentials разрешение на передачу куки
Access-Control-Allow-Origin здесь нужно указать адрес сервера 1С я так полагаю
Access-Control-Allow-Headers вот сюда входит разрешение на передачу Content-Tepe, Set-Cookie и прочих флагов при общение в междоменной среде (соответственно запрос с другой машины)

Советую почитать javascript - enabling cross-origin resource sharing on IIS7 - Stack Overflow

С нашей стороны ничего не менялось. Вы пробовали то, что вам посоветовал energon?

Доброго времени суток. Спасибо за информацию.
После правки Header.config, при HTTP запросе выводит следующий текст ошибки:
“Сервер не может обработать запрос, потому что данный тип носителя не поддерживается.”

Переделал формат запроса на основе SOAP 1.2:

Запрос = Новый HTTPЗапрос("/api.asmx?Login");
Запрос.Заголовки.Вставить("POST", 			"/api.asmx HTTP/1.1");
Запрос.Заголовки.Вставить("Host", 			"lerstest");
Запрос.Заголовки.Вставить("Content-Type", 	"text/xml; charset=utf-8");
Запрос.Заголовки.Вставить("SOAPAction", 	"http://www.lers.ru/website/api/Login");

ТекстXML = "<?xml version=""1.0"" encoding=""utf-8""?>
|<soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">
|<soap12:Body>
|<userName xmlns=""http://www.lers.ru/website/api"">admin</userName>
|<password xmlns=""http://www.lers.ru/website/api"">admin</password>
|</soap12:Body>
|</soap12:Envelope>";

Запрос.УстановитьТелоИзСтроки(ТекстXML,КодировкаТекста.UTF8);
ОтветАвторизации = Соединение.ОтправитьДляОбработки(Запрос);
Set_Cookie = ОтветАвторизации.Заголовки.Получить("Set-Cookie");

Теперь Cookie возвращает.
Но методы GetMeasurePointByIdExtended и GetMeasurePointTotals не возвращают расширенную информацию.
Конкретно GetMeasurePointByIdExtended с запрашиваемой информацией MeasurePointInfoFlags = “Equipment”, не возвращает тег “Device”.
А GetMeasurePointTotals не возвращает показания.

Подскажите, что можно сделать в первом случае “Сервер не может обработать запрос, потому что данный тип носителя не поддерживается.”?
И с возвратом расширенной информации?
Спасибо!

Попробуйте Content-Type: application/soap+xml; charset=utf-8
Вообще вся информация по функциям API есть по адресу http://ваш_адрес_web_lers/Api.asmx, там в том числе приведены для SOAP 1.2 форматы, смотрите

По поводу CORS то что я выше писал, прошу добавить в документацию. Это важный момент, потому что в междоменном взаимодействии без настроек для IIS разрешений на передачу данных нет. Единственный момент, не рекомендуют писать Access-Control-Allow-Origin: *, иначе куки (credentials) не будут передаватся, там обязательно нужно указывать конкретный адрес домена, на котором работает приложение.

Добрый день. Обмен заработал.
Описание формата как раз и брал из http://…/api.asmx. Проблема решилась установкой Content-Type: в значение “text/xml; charset=utf-8”,
а заголовка “SOAPAction” в значение соответствующие метода (например: “http://www.lers.ru/website/api/GetMeasurePointTotals”).
Т.е. обмен заработал на основе формата SOAP 1.1, описанного в http://…/api.asmx.

Всем спасибо за участие.

Большое спасибо за помощь, в ближайшее время мы внесем изменения в документацию.

Мы создали новый раздел в документации Веб-сервис доступа к данным.