Портирование веб-сервиса мыла Delphi 2010 с использованием wininet на winhttp

В настоящее время мы используем веб-сервис на основе мыла в приложении delphi, работающем на XP (да еще на XP) и портируем на ОС Windows 8.1. Наша текущая реализация также использует CAPICOM для управления сертификатами, который теперь также не поддерживается.

Мы планируем перейти с wininet на winhttp (быстрее), оставаясь с текущей версией Delphi 2010. Я нашел следующие компоненты: SynCrtSock, ICS и Indy. Из моего обзора они либо используют wininet, либо не поддерживают мыло?

Будем весьма благодарны за любую информацию о компонентах и ​​примерах с минимумом: поддержка мыла, winhttp и управление сертификатами.

Заранее спасибо.

1 ответ

Решение

Теперь я решил ключевой вопрос в управлении сертификатами и решил опубликовать свое решение.

Требования к управлению сертификатами были ограничены только присоединением к сообщению SOAP, и я смог достичь решения с помощью библиотеки wcrypt2. Мой оригинальный код с использованием CAPICOM (с помощью многих поисковых запросов в Интернете) был

   Certificate1.Load(CertFile, certpword, CAPICOM_KEY_STORAGE_DEFAULT,
    CAPICOM_CURRENT_USER_KEY);
  Cert2 := Certificate1.DefaultInterface;
  CertContext := Cert2 as ICertContext;
  CertContext.Get_CertContext(Integer(PCertContext));
  if internetsetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT,
    PCertContext, SizeOf(CERT_CONTEXT)) = False then
  begin
    'Error Handling'
  end;

Используя wcrypt2, я смог прочитать из хранилища сертификатов и прикрепить к сообщению мыла, просто изменив мою функцию BeforePost с помощью

hMyStore:=CertOpenSystemStore(0,'MY');
pCertContext:=CertFindCertificateInStore(
  hMyStore,
  X509_ASN_ENCODING,
  0,
  CERT_FIND_SUBJECT_STR,
  PCHAR('KeyName'),Nil
  );

  if internetsetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT,
        PCertContext, SizeOf(CERT_CONTEXT)) = False then
  begin
    'error handling'
  end;

И теперь я совместим с Windows 8.1, так как wininet все еще совместим с 8.1, это не на моем критическом пути и у меня есть дополнительное время для развертывания решения.

Любые дальнейшие советы по моему решению будут с благодарностью.

Другие вопросы по тегам