Multithreading Indy有时会抛出EIDOSSLCreating ContextError
我有一个每15分钟运行一次的计划任务。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
计划任务启动一个多线程服务,该服务向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
属性。