Multithreading Indy有时会抛出EIDOSSLCreating ContextError

Multithreading Indy有时会抛出EIDOSSLCreating ContextError,multithreading,delphi,indy,Multithreading,Delphi,Indy,我有一个每15分钟运行一次的计划任务。 计划任务启动一个多线程服务,该服务向web服务器发送web请求。有时,但并非总是,TidHTTP.Post抛出一个EIdOSSLCreatingContextError异常。实际上,我不可能在调试环境中重现异常,但我的日志在10天内有344个异常实例。 以下是崩溃的代码,请注意,多个线程可以同时访问此代码: class function THTTPClient.Post(aUrl : string; aPayload : string; aHeaderF

我有一个每15分钟运行一次的计划任务。
计划任务启动一个多线程服务,该服务向web服务器发送web请求。有时,但并非总是,
TidHTTP.Post
抛出一个
EIdOSSLCreatingContextError
异常。实际上,我不可能在调试环境中重现异常,但我的日志在10天内有344个异常实例。 以下是崩溃的代码,请注意,多个线程可以同时访问此代码:

class function THTTPClient.Post(aUrl : string; aPayload : string; 
aHeaderFields : TStringList) : string;
var
  oHTTP: TIdHTTP;
  ssPayload: TStringStream;
  bSecure: Boolean;
  sslIOHandler:TIdSSLIOHandlerSocketOpenSSL;
begin
  oHTTP := nil;
  ssPayload := TStringStream.Create(aPayload, TEncoding.UTF8);
  try
    oHTTP := TIdHTTP.Create;
    oHTTP.Request.CustomHeaders.AddStrings(aHeaderFields);
    bSecure := StartsText('HTTPS:', aUrl);
    if bSecure then
    begin
      sslIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(oHTTP);
      sslIOHandler.SSLOptions.Method := sslvSSLv23;
      sslIOHandler.SSLOptions.Mode := sslmUnassigned;
      sslIOHandler.SSLOptions.VerifyMode := [];
      sslIOHandler.SSLOptions.VerifyDepth := 0;
      sslIOHandler.Host := '';
      sslIOHandler.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2, sslvSSLv23, sslvSSLv3];

      oHTTP.IOHandler := sslIOHandler;
    end;
    oHTTP.HandleRedirects := true;

    try
      Result := oHTTP.Post(aUrl, ssPayload);
    except
      on E:Exception do
      begin
        Result := E.Message;
        raise;
      end;
    end;
  finally
    oHTTP.Free;
    ssPayload.Free;
  end;
end;
Eurekalog用于记录错误。以下是例外情况的详细信息:

Application:
--------------------------------------------------------------
1.1 Start Date      : Tue, 5 Jun 2018 03:52:26 +0200
1.2 Name/Description: AutoRunMT.exe
1.3 Version Number  : 7.12.48.94
1.4 Parameters      : 
1.5 Compilation Date: Fri, 18 May 2018 10:45:35 +0200
1.6 Up Time         : 23 hour(s), 21 minute(s), 59 second(s)

Exception:
----------------------------------------------------
2.1 Date          : Wed, 6 Jun 2018 03:14:25 +0200
2.2 Address       : 006625DF
2.3 Module Name   : AutoRunMT.exe
2.4 Module Version: 7.12.48.94
2.5 Type          : EIdOSSLCreatingContextError
2.6 Message       : Error creating SSL context.
2.7 ID            : E99A7A81
2.8 Count         : 1
2.9 Status        : New
2.10 Note         : 
2.11 Sent         : 0

另一方面,与您的错误无关,
SSLOptions.Method
SSLOptions.sslversion
是互斥的,您应该设置一个或另一个,而不是两个。当OpenSSL的
SSL\u CTX\u new()
失败时,会引发
eidosscreatingcontexterror
。异常的完整消息是什么?它还有一个
ErrorCode
属性,它的值是多少?@RemyLebeau啊,好的,谢谢!我不确定你指的是哪个错误代码。调试时我无法重现此错误,但我将在问题中附加异常详细信息。我指的是
EIdOSSLCreatingContextError.ErrorCode
属性。