Доступ к веб-сервису Dynamics NAV с помощью Java
Я пытаюсь получить доступ к веб-службе Dynamics NAV 2013 R2 из Java. Веб-служба работает, и когда я ввожу URL-адрес в Internet Explorer, я вижу WSDL, но сначала меня просят ввести имя пользователя и пароль. На Wireshark я вижу, что он использует аутентификацию на основе NTLM. Софар Мне удалось открыть WSDL только из Internet Explorer, когда я открываю его в Firefox, он дает мне пустую страницу и без ошибок.
Я пытаюсь получить доступ к веб-службе из Java с помощью инструмента wsimport, но я не могу пройти проверку подлинности. Я уже создал папку в ~/.metro/auth
и поместите туда следующую строку:
http://userfoobar:passforbar@192.168.0.170:7047//DynamicsNAV71/WS/CRONUS%20AG/Page/PageWithCapitalization
и я пытаюсь получить доступ к веб-странице с помощью:
wsimport -d generated -s sources http://@192.168.0.170:7047/DynamicsNAV71/WS/CRONUS%20AG/Page/PageWithCapitalization
Я всегда получаю ошибку:
[ERROR] Server returned HTTP response code: 401 for URL: http://@192.168.0.170:7047/DynamicsNAV71/WS/CRONUS%20AG/Page/PageWithCapitalization, "http://@192.168.0.170:7047/DynamicsNAV71/WS/CRONUS%20AG/Page/PageWithCapitalization" needs authorization, please provide authorization file with read access at /home/user/.metro/auth or use -Xauthfile to give the authorization file and on each line provide authorization information using this format : http[s]://user:password@host:port//<url-path>
Я пробовал это как на Linux, так и на машине с Windows 7, на которой работает веб-служба NAV. Нужно ли выполнять какие-либо дополнительные настройки в NAV? Есть ли какие-то специальные приемы, чтобы заставить это работать?
2 ответа
По умолчанию Nav использует авторизацию Windows Active Directory. Я не уверен, что wsimport делает в Java, но учетные данные, предоставленные в URL, вряд ли будут работать. Вам необходимо пройти процедуру согласования, чтобы авторизоваться на сервере или изменить тип авторизации в Nav Server Administration
оснастка на сервере (или в файле конфигурации).
Смотрите здесь о типах учетных данных и о том, как настроить сервер. Также см. Полезный пост в блоге Фредди о том, как подключиться к Nav из Java (я считаю, что он все еще актуален, хотя и для Nav 2009).
soapUI
может обрабатывать тип авторизации NTLM, чтобы вы могли видеть все запросы и ответы в процессе переговоров в его журналах.
Вы можете использовать для доступа к
NAV
веб-сервис с любого из популярных языков программирования. В этом случае я буду использовать
Node.js
.
NTLM authentication
позволяет клиенту получить доступ к ресурсу на сервере, предоставив учетные данные для учетной записи Windows, которая существует на сервере.
Итак, если на сервере есть пользователь с именем
GilbertS
с паролем
Gilbert1000
, вы можете отправить запрос на сервер, запустив следующий код javascript:
const httpntlm = require('httpntlm');
const NAV_DimQuery = "http://junit:7148/BC140/ODataV4/Company('CronusCompany')/MyDimensionQuery";
httpntlm.get({
url: NAV_DimQuery,
username: 'GilbertS',
password: 'Gilbert100',
domain: 'JUNIT'
}, function(err, res) {
if(err) {
throw err;
}
console.log(res);
});
Установите необходимую библиотеку, введя команду:
npm i httpntlm
Обратите внимание, что другие языки, такие как PHP и Java, имеют аналогичную библиотеку.
Чтобы получить имя домена, из командной строки или терминала сервера запустите:
SET
Найдите значение ключа под названием
USERDOMAIN
. Обратите внимание, что домен можно оставить пустым, если сервером является ПК, а не выделенный Windows Server.
Специальные конфигурации NAV / Business Central
В NAV или Business Central Administration на вкладке «Общие» есть поле с названием «Убедитесь, что он установлен» (для него установлено значение «истина»). Если вы не можете изменить его из окна администрирования NAV / BC, отредактируйте
CustomSettings.config
файл в пути:
C:\Program Files\Microsoft Dynamics 365 Business Central\140\Service
.
Поскольку мы используем NTLM для аутентификации, убедитесь, что NAV / BC настроен на использование
Windows authentication
. Вы делаете это, установив для
Windows
.
Если
Credential Type
установлен на что-то другое или вы не ставите галочку
Use NTLM Authentication
, при отправке запроса вы получите сообщение о том, что сервер не разрешает NTLM.
Наконец, остерегайтесь определенного случая, когда запуск кода заставляет NAV Server останавливаться, я все еще пытаюсь выяснить, что вызывает это.
Вы можете делать запросы в комментариях, если что-то все еще заставляет ваши запросы терпеть неудачу.