2009-05-06 10 views
0

COMサーバーとWindowsサービスを調べましたが、私の目的や実行方法に最も適しているかどうかはわかりません。私が望むのは、他のプロセスやアプリケーションがそのオブジェクトへの参照を取得する(またはサーバーへの要求を行う)ためにオブジェクトを保持する不確定な時間に起動して実行できるものです。Windows上の他のアプリケーション用に長寿命のサーバーを作成する

本質的に、サーバーはシリアルポート経由でデバイスにコマンドを処理し、デバイスの内部状態を維持するアプリケーションです。

私は現在、C#で書かれたデバイスの通信機能と永続性機能を持っており、プロセスごとに作成して実行できますが、明らかに一度インスタンス化して他のプロセスとは独立して実行してください。

私が読んだCOMチュートリアルは、私が望んでいたかどうか完全にはわからなかったので、私には分かりませんでした。これを行うにはもっとネットの方法が必要だと思っていました。

非常に助かります。

答えて

0

私はこのためのWindows Communication Foundation(WCF)サービスを構築し、利用できる多くのバインディングのいずれかでそれを公開します-don

。 HTTP/SOAP、HTTP/REST、TCP/Binary、MSMQなどを介して、すべて同じサービスから公開することができます。 Windows 2008をお持ちの場合は、Windows Activation Service(WAS)を使用してWindows 2008をアクティブ化できます。他のWindows OSを使用している場合は、Service Control Manager(SCM)に登録できるWindowsサービスを作成する必要があります。ここにはたくさんのオプションがありますが、私はあなたのサービスを作成するためにWCFを使用する方向に向かっています。 WCFがあなたのために大切にしている "配管"があります。そのすべてを再発明する必要はありません。お役に立てれば。

2

これは、Windowsサービスのための自然なフィット感のようです。私は.netプログラマではないと言わなければならないが、.netを使ってサービスを作ることができると理解している。あなたが知っている限り、.netを使ってシリアルポートを操作することができます。

+0

返信いただきありがとうございます。しかし、サービス上の公開機能にはどのようにアクセスしますか?また、サーバーは別のアプリによって起動され、そのアプリが終了すると停止する必要があります。サービスにはこの機能がありますか? – cachance7

+0

WCF経由でメソッドにアクセスします。したがって、正しい答えは、通信インターフェイスにWCFを使用し、ライフサイクルのためにWindowsサービス - サービスの開始と停止です。 – Cheeso

1

お客様の要件は少し矛盾しています。サーバーを無期限に実行する必要があり、実行するセッションに関係なく、すべてのクライアント間でプロセスを共有する必要があります。 Windowsサービスを利用する方法があります。

クライアントが存在している場合にのみサーバーを実行し、それらのクライアントが同じサーバープロセスを共有したい場合は、COMアウトオブプロセスサーバーをオプションとして使用できます。

COMの場合、DCOMを使用してサーバープロセスと通信する必要があります。サービスの場合は、DCOM、名前付きパイプ、RPC、またはその他のIPCメカニズムを使用できます。

しかし、C#でサーバーをコーディングしたい場合、DCOMはちょっと奇妙な選択です.DOMサーバーをC#で作成することは可能ですが、本当に扱いにくいです。 Kevinが指摘したように、WCF/WAS/Remotingはより簡単な選択肢かもしれません。しかし、このようなソリューションでは、ほとんどの場合、必然的にオーバーヘッドが大幅に高くなります。ネイティブCOMサーバーまたはサービスよりもメモリ消費量が少なくなります。このソフトウェアがクライアントマシンにインストールされる場合、私はネイティブソリューションを好むでしょう。

1

あなたは二つのことを求めているように見える -

  1. シリアルポート経由でいくつかのデバイス、または他をいじるますWindows上で長時間実行、永続的なアプリケーションをホストする方法。
  2. 他のアプリケーションからそのアプリケーションに通信する方法。

Windowsサービスは、最初の素晴らしいソリューションです。 Windowsサービスは、カスタムロジックのアプリケーションホストとして機能します。共通のUIとAPIを使用して、起動/停止と軽量の監視と設定機能を提供します。 C#でWindowsサービスを構築するのは簡単です。 GUIツールからのコマンドラインから、アプリケーションからWindowsサービスを簡単に開始および停止することができます。

WCFは主に通信インターフェイスと考えてください。 WCFを使用して、Windowsサービスによって公開される外部インターフェイスを構築することができます。 .NETまたはHTTPクライアント(RESTまたはSOAP)からアプリ(サービス)に接続する場合は、WCFが機能します。

COM .... COMが適合する場所で発生している混乱は、COMがインターフェイスメカニズム(IDispatch、IUnknownなど)をホスティング+ライフサイクルモデル(ローカルサーバー、Inprocサーバー、リモートサーバ、要求に応じて自動起動など)。 COMのホスティングとライフサイクルの仕事はうまくいったが、いつもかなりスリムであった。どんなサービスが稼働しているか、どれくらいの期間、知るのは難しいです。オンデマンドで始動と停止が難しい。

COMは、この状況では、WCFのように、主に通信インターフェイスとして重要です。コンポーネントベースのインターフェイスを使用してサービスに接続する場合、COMはWindowsサービスを補完してホスティングすることができます。

COMとWCF(RESTまたはSOAP)は互いに排他的ではなく、実際には複数のアプリケーションが複数のインターフェイスを公開しています。あなたは、どちらか一方、あるいは両方を行うことを選ぶかもしれません。間違った答えはありません、それはあなたの要求に依存します。

私がこれをやっていたら、私はWindowsサービスを使い、そのサービスからCOMインターフェイスを公開します。as described hereライフサイクルとホスティングは、Windowsサービスによって処理されます。 COMを介してサービスにアクセスできます。これは、実質的に任意のプログラミング言語またはスクリプト言語/環境を経由することを意味します。 Javascript、VB6、ExcelまたはOFfice、Python、Perlなど。

サービスからWCFインターフェイスを公開することも考えています。これにより、どのRESTクライアントも接続できるようになります。 WCFは無線電話、COMは固定電話と考えてください。時には1つしか必要ないこともあります。時には両方をしたい場合もあります。

関連する問題