4

私は現在、LocalSystemとして実行されているサービスと、ログオンしているユーザーごとに実行されているユーザーアプリケーション(トレイアプリ)があるc#のプロジェクトに取り組んでいます。

私は2人の間でコミュニケーションをとる必要があります。最初に、クライアントが接続してユーザー名を提供するために、サービスでNetTcpBindingを使用してエンドポイントを設定しました。その後、クライアントはそれぞれエンドポイントを設定します。net.tcp:// localhost:5001 / UserApp /'username'、ポート共有が有効になっています。その後、サービスはユーザー名を知って、そのエンドポイントに接続できます。

ただし、プログラムをUACでうまく機能させようとすると、いくつかの問題が発生しました。UACを有効にしたポート共有では、SMSvcHost.exe.configの<'allowAccounts>にユーザーを登録する必要があります。ユーザーを追加しても、エンドポイントを登録しようとすると、次のエラーが発生します。

アクセスが拒否されたため、サービスエンドポイントはURI'net.tcp:// localhost:5001 / UserApp/myuser'をリッスンできませんでした。SMSvcHost.exe.configの適切なallowAccountsセクションで、現在のユーザーにアクセスが許可されていることを確認します。

また、ユーザーアプリケーションをホストするときにうまく機能するNetNamedPipeBindingに切り替えてみました。ただし、このバインディングを使用すると、サービスはクライアントによって開かれたエンドポイントにアクセスできません。

したがって、基本的には、単一のサービスが同じマシン上の複数のユーザーアプリケーションにエンドポイントを提供し、サービスが複数のユーザーアプリケーションに接続してイベントの更新を送信できるようにする方法が必要です。

助言がありますか?

4

2 に答える 2

2

この場合、クライアントで新しいサービスを開く代わりに、コールバックチャネルを使用することを検討します(わかりました-ほぼ同じですが、WCFフレームワークと設定にうまく適合します)。これについては、ここで読むことができます:一方向のコール、コールバック、およびイベントについて知っておくべきこと

于 2011-09-08T12:00:04.013 に答える
0

デュプレックスサービス、特に「wsDualHttpBinding」も確認することをお勧めします。それはあなたが求めていることだけをするように設計されています...サービスとクライアントの両方が互いに独立してメッセージを送信できるようにします。

http://msdn.microsoft.com/en-us/library/ms731064.aspx

于 2011-09-08T13:22:56.157 に答える