2011-01-20 13 views
4

winformアプリケーションがあり、その内部にWCFサービスをホストしたいとします。私は別のappdomainでそれをホストする必要がありますか?どんな勧告?WCFサービスをホストするための推奨事項はありますか?

+0

サービスをホストしている理由を知りたいのですがウィンドウフォームアプリ。それはどちらかでホストする方がいいでしょうか? Windowsサービスb。 IIS(オプションの場合)代わりに? – InSane

+0

あなたのWinformsアプリケーションの中でそれをホストするならば、Winformsアプリケーションは稼働中であり、稼働しているだけです。 WCFサービスの「24時間体制」の可用性が必要な場合は、それらをWindows NTサービスに入れます。 –

答えて

4

別のドメインでホストする必要はありませんが、サービス要求をUIスレッドまたは別のスレッドで処理するかどうかを決定する必要があります。これは、ServiceHostインスタンスの作成方法またはサービスクラスに適用されるServiceBehaviorに依存します。

サービスがUIスレッドでホストされている場合、UIと直接対話できますが、要求処理はメッセージループの一部であり、すべてのサービス要求はシングルスレッドで処理されます(順次)。リクエストが処理されると、他のウィンドウイベント(UIイベントを含む)は処理できません=アプリケーションはフリーズします。

サービスが別のスレッドでホストされている場合、他のホスティング環境と同様に動作しますが、UIと直接対話できません。デリゲートの呼び出しを使用する必要があります。

自身のスレッドで実行するようにサービスを強制する

方法:あなたは(Windowsのメッセージループの開始)Application.Runを呼び出す前に

  • ServiceHostインスタンスを作成し、オープン
  • 別のスレッドでServiceHostインスタンスを作成し、オープンサービスの実装に[ServiceBehavior(UseSynchronizationContext = false)]を使用してください。
1

いいえ、別のAppDomainでホストする必要はありません。ちょうどそれをホストする。これに関してWinFormsには特別なことはありません。

0

あなたのアプリは何をしていますか?サービスは、アプリケーションの通常の機能の一部ですか、完全に別個の論理エンティティですか?

サービスを停止せずにサービスに関連するリソース(アセンブリなど)を読み込んでアンロードする場合は、別のアプリケーションドメインを使用するほうがはるかに簡単ですが、それ以外の場合はわかりませんもの。

私の2cです。 :-)

0

あなたはWinフォームでホストすることができますが、それを全部実行し続ける必要があります。

また、IISでホストすることをお勧めしますので、あらゆる種類のクライアントがサービスを利用できます。

関連する問題