Hello and welcome in the
DP!
If i understand you right, the smart card reader is separate and have nothing to do with the web service where you communicate with via
WSDL.
But, if you try to start the authentication process for the web service then is also the smart card reader reacting?
Where is the web service running? On the same PC?
What kind of web service is it?
thank you for answering. (excuse my bad english)
WSDL is a state ministerial service for the Italian national health service.
The WS requires authentication: Authentication base = 'User : Password'
When the certified card is not inserted, everything works fine.
When the Card Certificate is inserted in the Smart card reader of the PC,
during the authentication of the WS a window opens and wants the PIN of the certified card, which does not center with the authentication of the WS, this thing slows down the communication and a waste of time.
with the procedure I wrote before, using HTTPrio component works fine.
When the system has a smart card with a certificate, HTTPrio, who uses WinInet.dll (windows), starts the card request window of the card. Which I don't want!
The certificate in the authentication header must be only: User and Password.
I tried to close:
CertCloseStore (hMemoryStore, CERT_CLOSE_STORE_FORCE_FLAG)
I tried:
InternetSetOption(Data, INTERNET_OPTION_SECURITY_FLAGS, @aFlags, aFlagsSize)
Without success.
this step in the SOAPtrans.pas file is repeated twice. on the second step the card reading starts.
first step: RetVal = ERROR_INTERNET_FORCE_RETRY;
second step: RetVal = ERROR_SUCCESS;
Delphi-Quellcode:
{ line 1151 of soap.SOAPHTTPtrans.pas Posting Data Event }
if Assigned(FOnPostingData)
then
FOnPostingData(DatStr.Size, BuffSize);
RetVal := ERROR_SUCCESS;
{$IFDEF UNICODE}
HttpSendRequest(Request,
nil, 0,
DatStr.Bytes, DatStr.Size);
{$ELSE}
HttpSendRequest(Request,
nil, 0,
@DatStr.DataString[1],
Length(DatStr.DataString));
{$ENDIF}
RetVal := HandleWinInetError(GetLastError, Request, True);
case RetVal
of
ERROR_SUCCESS: break;
ERROR_CANCELLED: System.SysUtils.Abort;
ERROR_INTERNET_FORCE_RETRY:
{Retry the operation};
end;