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

Синхронизация календаря Exchange 2007 через Delphi XE5: без impersonation возможно?

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

Вопрос, поднятый в данной теме, касается возможности синхронизации календаря с сервером Exchange 2007 через клиентское приложение на Delphi XE5 без использования impersonation. В стандартной ситуации, когда синхронизация выполняется пользователем, имеющим специальные права на сервере, impersonation работает корректно. Однако, когда речь идет о запуске синхронизации в виде службы Windows, возникают ошибки.

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

Проблема заключается в том, что интерфейс, созданный с помощью компонента WDSL-Import из Delphi XE5, работает только с impersonation. Пример использования такого интерфейса выглядит следующим образом:

var
  ws: ExchangeServicePortType;
  exCreate: CreateItem;
  exItemResp: CreateItemResponse;
  exImper: ExchangeImpersonation;
  secContext: SerializedSecurityContext;
  exMailboxCult: MailboxCulture;
  exReqServerVersion: RequestServerVersion;
  exServerVersion: ServerVersionInfo;
...
ws := GetExchangeServicePortType(false);
...
exImper.ConnectingSID.SID := <useraccount>;
...
ws.CreateItem(exCreate, exImper, secContext, exMailboxCult, exReqServerVersion,
              exCreateItemResponse, exServerVersion);

Вопрос заданный разработчиком: существует ли возможность вызывать EWS без impersonation в Delphi XE5 и как это работает? В Managed API есть возможность использовать NetworkCredential:

ExchangeServiceBinding ws = new ExchangeServiceBinding();
ws.Credentials = new NetworkCredential("user", "password", "domain");

Контекст для написания статьи

Разработчик уже пытался использовать подход с C#-дll и EWS Managed API, но столкнулся с ошибкой при запуске приложения в виде службы Windows. Код C#-дll с использованием EWS Managed API и загрузка его в приложение Delphi выглядит следующим образом:

public class EWSSync
{
    public static ExchangeService service;
    ...
    [DllExport]
    public static int InitEWS()
    {
        ...
        service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
        service.Credentials = new WebCredentials("name", "pwd", "domain");
        service.Url = new Uri("https://myServer/EWS/Exchange.asmx");
        ...
    }
    ...
}

Загрузка C#-дll в Delphi-приложение происходит следующим образом:

type
    TCreateInstance = function(): integer; stdcall;
...
procedure Execute()
var
    res: integer;
begin
    FDLLHandle := LoadLibrary(pansichar('EWSTerminSync.dll'));
    if FDLLHandle >= 32 then
    begin
        @FCreateInstance := GetProcAddress(FDLLHandle, 'InitEWS');
        ...
        res := FCreateInstance;
        ...
    end;
end;

При выполнении в виде обычного приложения Delphi все работает корректно, но при запуске в виде службы Windows возникает ошибка.

Подтвержденный ответ

Ошибка возникает из-за особенностей работы с EWS Managed API в службах Windows. Для решения проблемы необходимо убедиться, что служба запущена под учетной записью, имеющей необходимые права, и что настройка безопасности сервера Exchange позволяет выполнение операций без impersonation.

Альтернативный ответ

Альтернативный подход заключается в создании смешанного режима C++/CLI сборки, экспортировании функционала, необходимого в Delphi, или использовании C# сборки с публикацией COM-интерфейса.

Также было замечено, что Delphi добавляет XML-узел даже для пустых параметров, что может быть причиной проблемы. В качестве решения предложено создать новый класс TOPToSoapDomConvert2, который пропускает пустые параметры.

Вывод

Для синхронизации календаря Exchange 2007 через Delphi XE5 без использования impersonation возможно потребуется пересмотреть подход к работе с EWS, возможно, с использованием альтернативных технологий или изменением настроек безопасности.

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

Проблема синхронизации календаря Exchange 2007 через Delphi XE5 без impersonation связана с ограничениями доступа в службах Windows и требует специальных настроек безопасности сервера Exchange.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-07-25 16:10:05/0.006166934967041/0