Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исправление Ошибки SOAP-запроса в EWS для Delphi XE2

Delphi , Программа и Интерфейс , Процессы и Сервисы

При работе с SOAP-запросами в Delphi XE2 при использовании EWS (Exchange Web Services) для операций с Exchange Server, пользователи могут столкнуться с ошибкой "Attribute is not declared", которая связана с неправильным формированием XML-структуры запроса. В данной статье мы рассмотрим, как исправить эту ошибку, опираясь на опыт пользователя, который столкнулся с подобной проблемой.

Описание проблемы

Пользователь столкнулся с ошибкой при выполнении запроса ResolveNames через EWS, используя Delphi XE2. Пример корректного XML-запроса, сгенерированного в SoapUI, был следующим:

<soapenv:Envelope
  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:typ="http://schemas.microsoft.com/exchange/services/2006/types"
  xmlns:mes="http://schemas.microsoft.com/exchange/services/2006/messages">
  <soapenv:Header>
    <typ:RequestServerVersion Version="Exchange2010"/>
  </soapenv:Header>
  <soapenv:Body>
    <mes:ResolveNames ReturnFullContactData="1" SearchScope="ActiveDirectoryContacts">
      <mes:UnresolvedEntry>deve</mes:UnresolvedEntry>
    </mes:ResolveNames>
  </soapenv:Body>
</soapenv:Envelope>

Однако, при попытке выполнить аналогичный запрос из Delphi, был получен следующий XML:

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <SOAP-ENV:Body xmlns:NS1="http://schemas.microsoft.com/exchange/services/2006/types">
    <ResolveNames xmlns="http://schemas.microsoft.com/exchange/services/2006/messages" ReturnFullContactData="true" NS1:SearchScope="ActiveDirectoryContacts">
      <UnresolvedEntry>deve</UnresolvedEntry>
    </ResolveNames>
    <MailboxCulture xsi:nil="true"/>
    <ExchangeImpersonation xsi:nil="true"/>
    <NS1:RequestServerVersion Version="Exchange2010"/>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Этот запрос приводил к ошибке:

The request failed schema validation: The 'http://schemas.microsoft.com/exchange/services/2006/types:SearchScope' attribute is not declared.

Проблема заключалась в неправильном указании пространства имен для атрибута SearchScope.

Подтвержденное решение

Пользователь нашел решение в том, чтобы не пытаться исправить XML-разметку, сгенерированную автоматически, а взять полный контроль над содержимым SOAP-запроса. Он использовал TStringStream для построения XML-структуры запроса, а затем в методе BeforeExecute HTTPRIO вставил содержимое TStringStream в SOAP-сообщение. Это позволило ему использовать SoapUI для тестирования и генерации запросов, а затем интегрировать их в свой код Delphi.

Пример кода

Вот примерный код, который демонстрирует старый и новый подходы к формированию SOAP-запроса:

procedure TFrmTestEWS.BtnConnectClick(Sender: TObject);
// Старый подход, который приводил к ошибке
// ...

procedure TFrmTestEWS.BtnAlternateClick(Sender: TObject);
// Новый подход, формирование запроса вручную
begin
  InitializeSoapData;
  FSoapData.WriteString('  <mes:ResolveNames ReturnFullContactData="true" SearchScope="ActiveDirectoryContacts">');
  FSoapData.WriteString('    <mes:UnresolvedEntry>deve</mes:UnresolvedEntry>');
  FSoapData.WriteString('  </mes:ResolveNames>');
  FinalizeSoapData;
  // Продолжение выполнения запроса
  BtnConnectClick(Sender);
end;

Заключение

При работе с EWS и SOAP-запросами в Delphi важно тщательно следить за структурой XML-сообщений и соответствием пространств имен. В случае возникновения ошибок, связанных с валидацией схемы, стоит рассмотреть возможность ручного контроля над содержимым SOAP-запроса. Это позволит избежать многих проблем и обеспечит большую гибкость в управлении запросами.

Создано по материалам из источника по ссылке.

При работе с EWS и SOAP-запросами в Delphi XE2 пользователь столкнулся с ошибкой из-за неправильного формирования XML-структуры запроса и научился исправлять подобные ошибки, взяв контроль за процессом создания запроса.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Процессы и Сервисы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 16:39:15/0.0032460689544678/0