2

*) IIS 7.5 - Server 2008 R2 で実行されている Delphi XE ISAPI dll があります。DLL は TISAPIApplication のインスタンスを起動します。アプリケーションは、目立たない固定の事前定義された URL に存在し、特定のポート (ポート 80 ではない) で要求をリッスンします。もちろん、これらはすべて「標準構成」です。

*) 私のサーバーにはいくつかの dll があり、それぞれが TISAPIApplication の異なるインスタンスを起動し、異なる URL にマップされ、異なるポートでリッスンします。実行時に、ポート番号に基づいてアプリケーションのさまざまなインスタンス (Dev、Prod、FailOver など) を区別します (URL を解析するよりも簡単です)。

*) TISAPIApplication とその祖先および関連クラスのドキュメントとソース コードを調べましたが、アプリケーションの特定のインスタンスがリッスンしているポートを示すプロパティがどこにも見つかりません。リクエストごとにのみ利用可能です。単純な展開では、リスニングポートは通常静的であるため、アプリの起動時にそのポート値を取得できるはずです-これにより、リクエストが来るのを待つ代わりに、特定のリソースの割り当てが容易になります.

*)これを行う方法を知っている人はいますか? どのプロパティをどこから取得する必要がありますか? 実際、アプリケーション自体が存在する URL について何かを教えてくれるものはまったく見つかりません。すべてが要求ごとに機能しているようです。

(お願いします - リクエストを介してそれを行う方法や、HTTP はステートレスであり、すべてがリクエストごとに機能することを教えてくれる回避策を探しているわけではありません - 私はそれらの回避策を知っており、それらを使用したくありません。そして、スレッドは、「ステートレス」な方法で要求を処理するために ISAPI によって生成されます。IIS によって ISAPI dll がロードされると、TISAPIApplication インスタンスが起動されます。この TISAPIApplication インスタンスは、ISAPI アプリケーションの存続期間中持続し、存続期間中有効な状態情報を含みます。アプリケーション インスタンスの )。

ティア

4

2 に答える 2

1

ISAPI 関数 GetServerVariable ( http://www.podgoretsky.com/ftp/Docs/Internet/Late%20Night%20ActiveX/ch7.htm#CHttpServerContextObject - 表 7.7 HTTP 環境変数) は、SERVER_PORT 変数を返すことができます。おそらく、この関数は DLL の初期化時に呼び出すことができます。


あなたが書いたように

アプリケーションは、目立たない固定の事前定義された URL に常駐し、特定のポート (ポート 80 ではない) で要求をリッスンします。

実行時に、ポート番号に基づいてアプリケーションのさまざまなインスタンス (Dev、Prod、FailOver など) を区別します

最初のリクエストがアプリに到達する前に、リソースを消費する初期化タスクなどを、すべてのリクエストで実行するのではなく、何かを実行する必要があると想定しました。この場合、アプリケーションのライフサイクルの早い段階で使用できる機能が利点になります。ただし、ISAPI アプリケーションのライフサイクルについて調査して、これが通常どのように行われるかを調べることはしませんでした。

于 2012-04-04T20:59:46.993 に答える
0

ここで、完全に有効ではないことをしようとしているのかもしれません。単純なアプリでは、通常、変更されない指定されたポートに座っているリスナーがありますが、そのようにする必要はありません-唯一の方法です確実にリッスン ポートを決定するには、前ではなく、要求自体からのものです。そのため、TISAPIApplication はリスニング ポートに関する情報を永続化するべきではありません。これは本質的に揮発性です。

于 2012-04-04T22:09:50.237 に答える