1

TIdHTTPとTIdSSLIOHandlerSocketOpenSSLを削除し、IdHTTPのIOHandlerをSSLハンドラーに設定し、TIdSSLIOHandlerSocketOpenSSLのモードをsllmClientに設定しました。そして、下にボタンクリックイベントを追加しました。初めてこのエラーがWhichFailedToLoadから発生しました。

ここに画像の説明を入力してください

表示されますが、2回目にボタンを押すと機能します。ssldllは.exeディレクトリにあります。

このサービスはブラウザから正常に動作し、本番環境にあります。なぜ初めて動作しないのですか?

procedure TForm32.Button1Click(Sender: TObject);
var
  output : TMemoryStream;
begin
    output:=TMemoryStream.Create;
//    IdOpenSSLSetLibPath(
  try
    IdHTTP1.get('https://localhost:444/Folder/service.svc',output);
    output.position := 0;
    memo1.lines.LoadFromStream(output);
  except
    on exception do
    ShowMessage(WhichFailedToLoad());
  end;
end;

tia

4

2 に答える 2

3

最新バージョンのIndyssldllに更新する必要があります。これにより、例外が完全に解消されます。

于 2012-11-08T13:59:19.233 に答える
3

本当に古くて古いバージョンのIndy10を使用している必要があります。そのメッセージボックスで報告されている関数のほとんどには、_Indy接尾辞が付いています。

Indy9以前および初期のIndy10リリースでは、パブリックOpenSSLAPIでまだ公開されていない内部OpenSSLデータにアクセスするためにIndy固有の関数を追加するカスタムビルドのOpenSSLDLLが必要です。そのデータが後のAPIリリースで公開されると、Indy 10が更新され、カスタムビルドのDLLが不要になりました。現在、標準化されたOpenSSLDLLをそのまま使用しています。

したがって、古いカスタムビルドのIndy OpenSSL DLLを追跡するか、最新のIndy10バージョンにアップグレードする必要があります。

于 2012-11-08T19:11:21.457 に答える