3

アイテムのリストを指定して、適用される可能性のある特別な取引を考慮して合計価格を計算するいくつかの Delphi コードがあります。

このコードを別の言語で書き直すのは簡単ではありません。

同じサーバー上で実行されている Web サイトと通信するには、どのように設定すればよいですか? ウェブサイトは、ユーザーがショッピング カートを更新するたびに価格を尋ねる必要があります。複数の同時リクエストが存在する可能性があります。

Delphi コードは、データベースから定期的に更新される、メモリ内の特売リストを維持する必要があります。したがって、単純に毎回実行することはできません。

Web サイトが何に記述されているのか、どの http サーバーで実行されているのかさえわからないので、アイデアや標準的な方法を探しているだけです。

4

7 に答える 7

3

ボックスで win32 アプリが既に Windows サービスとして実行されているようです。そのため、そのサービスを変更できない場合は、要求を受け入れて応答する方法に対処する必要があります。これは、ソケットまたは Web サービスなどのより高いレベルの通信プロトコルを介して行うことができます。

いくつかのことができます。サービスと通信する方法を知っているアセンブリを作成し、Web サイトでそのアセンブリを使用します。または、レガシー サービスとの通信方法を知っているが、Web サービスなどのより高いレベルのプロトコルを介した通信を公開する shim サービスを構築することもできます。どちらの方法でも、同時実行性、スレッド化、および通信の問題を呼び出しやすいインターフェイスの背後に隠すという利点がありますが、後者を使用すると、サービスとの通信が誰にとっても簡単になります。

于 2009-05-13T20:23:07.917 に答える
3

Delphi アプリを変更して、XML リクエストを受け取り、TCP ソケット経由で XML 応答を返すようにできれば(理想的には HTTP プロトコルを使用して)、ほとんどの Web サーバー フレームワークと比較的簡単に相互運用できるようになります。ただし、その統合を実現する方法の正確な詳細は、それが記述された言語/フレームワークによって異なります。

Web サーバーが Windows 上にある場合、URL または POST 操作の一部としてパラメーターを取得して、XML または HTML を返すことができる DLL として Delphi アプリをコンパイルできます。Web サーバー用の Delphi DLL の作成に関する詳細については、こちらを参照してください。

于 2009-05-13T20:35:17.477 に答える
2

私はこれを非常に複雑な労働者災害補償計算機で行いました。RemObjectsSdkを使用してWindowsサービスを作成しました。計算は石鹸法として公開されているため、ほぼすべての人がアクセスできます。

サービスでRemObjectsを使用する必要はありませんが、基礎となる配管の多くを処理するため、使用がはるかに簡単になります。クライアントはRemObjectsを必要とせず、soapメソッドを呼び出すことができれば十分です。ほぼすべてのプログラミング言語でそれを行うことができます。

また、soapインターフェイスを公開するIIS用のisapidllを作成することもできます。これは、異なるサーバー上の他のWebサイトがメソッドにアクセスする必要がある場合に役立ちます。ただし、私の場合は、ファイアウォールのポートを開いてWindowsサービスにアクセスすることでこれを処理しました。

ウェブ上にはたくさんの例があります。読み始める場所は、About.ComDrBobです。

于 2009-05-13T22:37:46.560 に答える
2

既存のシステムが実行されている Web サーバーや OS は関係ありません。重要なのは、コードを何の下で実行したいかです。Windows の場合、最も簡単な解決策は、WebBroker を使用してカスタム ISAPI アプリケーションを作成するか、SOAP を使用して Web サービスを公開することです。最初の方法は、たとえば API のような残りの部分を作成する場合に使用できます。2 番目の方法は、Web アプリケーションに Web サービスを使用する機能がある場合に使用できます。

もう 1 つのオプションは、IIS の下の同じボックスで両方を実行している場合、COM/Automation オブジェクトを作成し、サーバー サイド スクリプト (ASP) を介して呼び出すことです。アプリケーションが ASP.NET アプリケーションの場合、PRISM を使用してコードをアセンブリに移植します。

于 2009-05-13T20:33:34.733 に答える
1

Web アプリケーションをバックグラウンド サービスと統合する一般的な方法は、メッセージ ブローカーです。

メッセージ フローは次のようになります。

  • Web アプリケーションは、「計算要求」メッセージをメッセージ ブローカのメッセージ宛先に送信します。これには、必要なすべてのパラメータと、計算要求と Delphi サービスからの応答を照合するための相関 ID が含まれます。

  • 1 つ(または、高可用性 / 負荷分散環境ではそれ以上)の Delphi サービスがメッセージを処理します。次の受信メッセージをプルし、パラメータを計算エンジンにフィードして処理し、「計算結果メッセージ」を Web サーバーに送り返します。

  • Web サーバーは、応答を同期的に待機し (そして、一致する相関 ide を持たない応答を破棄し)、結果の HTML ドキュメントを作成するか、または他のタスクを続行して、Ajax ベースなどの別のスレッドで計算結果を非同期に受け取ることができます。ウェブアプリケーション

Dopplr イメージ サービスの概要については、次のスライド ショーを参照してください。

http://de.slideshare.net/carsonified/dopplr-its-made-of-messages-matt-biddulph-presentation

マット・ビダルフによるメッセージで構成されています

于 2013-08-21T16:29:44.867 に答える
1

このアプリを Windows サービスに分割します。Windows サービスと通信する Web サービスを記述します。この Web サービスは一貫したインターフェースとなり、古い Delphi アプリを保護するため、Web サービスの設計にはある程度の時間を費やす必要があります。したがって、将来、Web アプリ、モバイル アプリ、または思いつくものを作成する場合はいつでも、XML Web サービスという 1 つの一貫したインターフェイスを使用できます。

于 2009-05-13T20:38:20.063 に答える
0

それをサービス (ライブラリではなく) にすることができる場合は、何らかの方法でプロセス間通信を行う必要があります。Windows でこれを行う方法はいくつかあります。

  • 自分でマーシャリング/認証を行う必要があるため、ソケットを直接接続するのが最も難しい
  • 共有メモリ(ヤッ!)
  • うまく機能するが自明ではないRPC
  • DCOM は簡単ですが、設定が面倒です
  • WCF - Delphi で書かれた Windows サービスから呼び出すことはできますか?
  • 于 2009-05-13T22:48:46.060 に答える