使用wininet将Delphi 2010应用程序soap webservice移植到winhttp

时间:2016-02-25 06:05:39

标签: web-services delphi soap delphi-2010

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

我们正计划从当前版本的Delphi 2010继续从wininet升级到winhttp(更快)。我找到的组件是:SynCrtSock,ICS和Indy。从我的评论,这些使用wininet或不支持肥皂?

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

我现在已经在证书管理中解决了我的问题的关键点,并认为我会发布我的解决方案。

证书管理要求仅限于附加到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函数附加到soap消息

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

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