Создание веб-сервиса в Dynamics 365 Finance and Operations (Axapta)
Для создания веб-сервиса в Dynamics 365 Finance and Operations можно использовать методы контроллеров (SysOperation или DataEntity) или OData-сервисы. Вот пошаговая инструкция для создания RESTful веб-сервиса с помощью контроллера:
Contents
Создание класса Data Contract
Data Contract используется для передачи данных в веб-сервис. Он определяет структуру данных, которые клиент может отправить в веб-сервис.
- Создайте новый класс:
- Откройте Visual Studio.
- В AOT добавьте новый класс и дайте ему имя (например, MyWebServiceDataContract).
- Добавьте атрибут [DataContractAttribute] к классу.
- Добавьте приватные переменные, которые будут использоваться как параметры.
- Создайте публичные методы (геттеры/сеттеры) с атрибутом [DataMemberAttribute].
Пример
[DataContractAttribute]
class MyWebServiceDataContract
{
private str _inputData;
[DataMemberAttribute]
public str parmInputData(str _value = _inputData)
{
_inputData = _value;
return _inputData;
}
}
Объяснение
- DataContractAttribute указывает, что класс используется как контракт данных.
- DataMemberAttribute указывает, что метод будет доступен для сериализации.
Создание класса Data Provider
Этот класс реализует бизнес-логику. Он обрабатывает входные данные из Data Contract и возвращает результат.
- Создайте новый класс, например, MyWebServiceProvider.
- Напишите статический метод, который принимает объект Data Contract в качестве параметра.
- Реализуйте бизнес-логику.
Пример
class MyWebServiceProvider
{
public static str processData(MyWebServiceDataContract _contract)
{
str inputData = _contract.parmInputData();
// Пример бизнес-логики
str result = strFmt("Processed data: %1", inputData);
return result;
}
}
Создание сервиса
Сервисный класс контролирует, какие методы будут доступны клиенту.
- Создайте новый класс, например, MyWebService.
- Укажите атрибут [ServiceContractAttribute].
- Определите метод, который принимает объект Data Contract и вызывает метод из Provider.
Пример
[ServiceContractAttribute]
class MyWebService
{
public str processRequest(MyWebServiceDataContract _contract)
{
return MyWebServiceProvider::processData(_contract);
}
}
Объяснение
- ServiceContractAttribute указывает, что этот класс будет доступен через веб-сервис.
- Метод processRequest – это основной метод, вызываемый клиентом.
Добавление сервиса в Application Object Tree (AOT)
- Создайте новый объект Service.
- Создайте новый сервис:
- Назовите его (например, MyWebServiceService).
- В поле Class укажите созданный класс MyWebService.
- В разделе Operations добавьте метод processRequest.
Создание Service Group
Service Group позволяет развернуть сервис и сделать его доступным для вызова.
- Создайте новый Service Group.
- Создайте новую группу:
- Дайте имя, например, MyWebServiceGroup.
- Добавьте в группу созданный сервис (MyWebServiceService).
- Разверните группу:
- Нажмите правой кнопкой мыши на группе.
- Выберите Deploy Service Group.
После развертывания сервис станет доступен по URL.
Тестирование веб-сервиса
- Откройте URL веб-сервиса в браузере или используйте инструмент вроде SoapUI.
- URL имеет вид: https://[server]:[port]/soap/services/[ServiceGroupName]
- Отправьте тестовый запрос в формате SOAP или JSON.
Тестирование через SoapUI
- Откройте SoapUI.
- Создайте новый проект:
- В меню выберите File → New SOAP Project.
- В поле Project Name введите название проекта (например, MyWebServiceTest).
- В поле Initial WSDL вставьте URL вашего WSDL (например, https://[server]:[port]/soap/services/MyWebServiceGroup?wsdl).
- Нажмите OK.
- SoapUI автоматически загрузит описание сервиса и сгенерирует список доступных методов.
- Выбор метода для тестирования
- В дереве проекта откройте узел, соответствующий вашему сервису.
- Найдите метод, который хотите протестировать (например, processRequest).
- Дважды кликните по методу, чтобы открыть окно запроса.
- Настройка SOAP-запроса
- В открывшемся окне SoapUI будет сгенерирован шаблон SOAP-запроса.
- Заполните тело запроса, указав входные данные для Data Contract.
- Отправка запроса
- В верхнем меню нажмите Run (зеленая кнопка с треугольником).
- SoapUI отправит запрос на сервер.
- Анализ ответа
- Если запрос успешен, вы получите SOAP-ответ с результатом выполнения метода.
- Если произошла ошибка, проверьте:
- Корректность WSDL-адреса.
- Настройки безопасности в Dynamics 365 F&O (например, разрешение доступа к сервису для текущего пользователя).
- Отладка и исправление ошибок
- Если сервис не отвечает:
- Проверьте, запущен ли IIS на сервере.
- Убедитесь, что сервис развернут корректно.
- Если появляется ошибка авторизации:
- Включите аутентификацию через SOAP-заголовки.
- Добавьте учетные данные в Request Properties → Authentication.
- Если сервис не отвечает:
- Тестирование разных сценариев
- Измените входные данные в запросе для проверки разных случаев.
- Убедитесь, что ваш веб-сервис возвращает корректные ответы для всех тестовых сценариев.
Пример SOAP-запроса:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:svc="http://tempuri.org/">
<soapenv:Header/>
<soapenv:Body>
<svc:processRequest>
<!-- Data Contract -->
<svc:_contract>
<svc:parmInputData>Test Data</svc:parmInputData>
</svc:_contract>
</svc:processRequest>
</soapenv:Body>
</soapenv:Envelope>
Объяснение
- <svc:processRequest> — имя метода.
- <svc:_contract> — объект Data Contract.
- <svc:parmInputData> — входной параметр, соответствующий вашему контракту.
Пример успешного ответа
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<processRequestResponse xmlns="http://tempuri.org/">
<return>Processed data: Test Data</return>
</processRequestResponse>
</soapenv:Body>
</soapenv:Envelope>
Теперь ваш веб-сервис готов для использования внешними системами!
Comments
So empty here ... leave a comment!