【问题标题】:Porting Delphi 2010 application soap webservice using wininet to winhttp使用wininet将Delphi 2010应用soap webservice移植到winhttp
【发布时间】:2016-02-25 06:05:38
【问题描述】:

我们目前在 XP 上运行的 delphi 应用程序中使用基于肥皂的 Web 服务(是的,仍在运行 XP)并移植到 Windows 8.1 操作系统。我们当前的实现还使用 CAPICOM 进行证书管理,现在也不再支持。

我们计划在当前版本的 Delphi 2010 中从 wininet 升级到 winhttp(更快)。我发现的组件是: SynCrtSock 、 ICS 和 Indy。根据我的评论,这些要么使用 wininet,要么不支持肥皂?

非常感谢任何有关组件和示例的信息,包括:soap 支持、winhttp 和证书管理。

提前致谢。

【问题讨论】:

    标签: web-services delphi soap delphi-2010


    【解决方案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 兼容,这不在我的关键路径上,并且有更多时间来部署解决方案。

    对于我的解决方案的任何进一步建议将不胜感激。

    【讨论】:

      猜你喜欢
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      相关资源
      最近更新 更多