WCFサービスとWindowsサービスをどのように通信しますか?
-
03-07-2019 - |
質問
2週間前、同じコンピューターで実行されているWindowsサービスとwcfサービスを通信する方法が必要でした。 Windowsサービスは、外部ソースからデータを取得し、クライアントが要求を行ったときにデータを提供する必要があるwcfサービス(IISでホストされる)と共有する必要がありました。私はipcでそれをすることにしました。
これで完了しました。Windowsサービスはipcサーバーで、wcfサービスはipcクライアントです。これはうまくいきますが、正しく実行するにはWindowsサービスをASPNETアカウントで実行する必要があり、ASPNETパスワードアカウントを割り当てる必要があり、IISが正しく動作しないため、これを行うのは間違いだと思います。
私はさまざまな代替案を考えていますが、それらのすべてにおいて問題は持続します。いくつかのアイデア?
編集:
必要なのは、IISでホストされているWebサービスで、別の古いシステムからtelnetを介して取得されたデータを公開するシステムで、少し不安定です。この2番目のシステムの応答が遅かったため、Webサービスと古いシステムの間にプロセス(Windowsサービス)を配置することにしました。 Windowsサービスは、古いシステムから収集したデータを保存する必要があり、wcfサービスがipcを使用して一度にすべてを提供するように要求したとき。
解決
WCFサービスと他のサービスの両方が実行されるASPNETユーザーの同じ権限セットを持つ別のアカウントを作成するだけではどうですか?これにより、パスワードを制御できます。
他のヒント
WindowsサービスをASPNETユーザーとして実行する必要があるのはなぜですか?呼び出し元からの認証を必要とするIPC接続を使用しているためですか?
別の代替手段(windows-serviceコードを制御できる場合)は、WCFサービスも作成することです(windowsサービスでServiceHostを使用)。 IPCのようなパフォーマンスが必要な場合、IISサービスはNetTcpまたはNetNamedPipeバインディングを使用してWindowsサービスに接続できます。
理想的には、WindowsサービスはWCFサービスとして実行する必要があります。これにより、クライアントは簡単に通信できます。
次の質問は、「クライアント」がWCFサービスである必要がある天気です。このクライアントが他のアプリケーションにサービスを提供する必要がある場合は適切です。それ以外の場合は必要ありません。私はあなたのシステムについて十分に知らないので、何が最善かを決めるのはあなた次第です!