2012-02-28 7 views
2

ユニットテストにローカルHTTPサーバーが必要です。TIdHTTPServerは、DUnitテストで起動時にEThreadエラー6を発生させます。

私はSetUpでTIdHTTPServerをアクティブ化しようとすると、それはETHREADメッセージで失敗します。

"Thread Error: descriptor not valid (6)"

これは私がそれを初期化する方法である:

type 
    TestMyUnit = class(TTestCase) 
... 
procedure TestMyUnit.SetUp; 
begin 
    FServer := TIdHTTPServer.Create(nil); 
    FServer.OnCommandGet := HTTPServerCommandGet; 
    FServer.Active := True; // <---- This will cause error 
end; 

はたぶんDUnitのとインディのTIdHTTPServerを使用して、いくつかの制限がありますフレームワーク?

  • デルファイ2010
  • インディ10

例外は、しかし、私は深くそれをトレースすることはできませんTIdListenerThread.Run PROC(IdCustomTCPServerユニット)

LIOHandler := Server.IOHandler.Accept(Binding, Self, LYarn); 

にこの行の後にどこかに投げられましたどうしてか分かりません。

+0

私はこれを尋ねる必要があります...実行可能ファイルを別のマシンで実行しようとしましたか? – Nat

答えて

1

を解決しました。私は自分自身で設計されたコンポーネントを持つ私自身のDPKを持っています(このユニットテストで使用されています)、Indyへの参照を持つユニットが1つありました。そのパッケージを再構築した後、コンパイラはIndyコンポーネントに新しいDCCReferenceを追加するように提案しました。パッケージを再インストールした後、単体テストのエラーが消えました。

私は因果関係を想像することはできませんが、今は大丈夫です。

2

ファイアウォールの設定でコントロールパネル> Windowsファイアウォール>詳細設定>インバウンドルールを実行するには、DUnit実行可能ファイルを許可する必要があります。

通常、実行可能ファイルが最初にポートを開こうとするとウィンドウが表示されますが、とにかくそこにルールがあることを確認します。

編集:「有効な記述ではない」

ちょうど、エラーをもう少し情報を追加するには、Winsockエラーのように見え、そしてあなたのコードは、ポートを開くことができないためである可能性があります。それはファイアウォールでブロックされている可能性があります(上記のように)、またはあなたがそのポートを開いている別のプログラムを持っている可能性があります...おそらくIISのような?私はどこか1024以上のポートを選択し、それを使用するようにWebサーバーを設定します(そして明らかにクライアント)。

編集2:私のTIdHttpServerを設定するための

私のコードは次のとおりです。

FServer := TIdHttpServer.Create(nil); 
FServer.DefaultPort := 7777; 
FServer.AutoStartSession := True; 
FServer.OnCommandGet := ServerCommandGet; 
FServer.OnCreatePostStream := ServerCreatePostStream; 

FServer.Active := True; 
+0

ファイアウォールを無効にして「DefaultPort」を10080に設定しても変更はありません – Andrew

+1

問題が見つかりました。私は自分自身で設計されたコンポーネントを持つ私自身のDPKを持っています(このユニットテストで使用されています)、Indyへの参照を持つユニットが1つありました。そのパッケージを再構築した後、コンパイラはIndyにいくつかの新しいDCCReferenceを追加するように提案しました。パッケージを再インストールした後、そのエラーはなくなりました。どのように私はこれを答えとして追加すべきか、それともあなたの答えを正しいものとしてチェックするのが良いと思いますか?私の状況はあまりよくありません。 – Andrew

+0

あなたがしたことを説明する自分の答えを追加し、24時間後にそれを受け入れます:) – Nat