0

私は、WCF サービスをホストする Windows サービスを構築しています。

var ServicesToRun = new ServiceBase[] 
            { new Service_1_Host() };
ServiceBase.Run(ServicesToRun);

私の質問は:

ホストを持つ 2 番目のサービスがあり、上記のコードの配列に次のように追加したとします。

var ServicesToRun = new ServiceBase[] { new Service_1_Host(), 
                                        new Service_2_Host() };
ServiceBase.Run(ServicesToRun);

2 番目のホストは独自のアプリ ドメインで実行されますか、それとも 2 つのホストがそれぞれ別のアプリ ドメインで実行されるようにするために必要な構成がありますか?

4

2 に答える 2

3

あなたはこれにすべて間違って近づいています....あなたは離れておく必要があります:

  • Windows NT Service (から派生ServiceBase)

  • ServiceHost実際の WCFサービス インターフェイスを提供する実際の WCF サービス ホスト (から派生)。

基本的に、あなたがする必要があるのはこれです:

  • NT サービス ( ServiceBase) にOnStartイベントがあります。そのイベント内で、WCFServiceHostインスタンスを作成して開く必要があります。WCF サービス (実装) クラスごとに 1 つです。

  • その NT サービス ( ServiceBase) にはOnStopイベントがあり、その中で WCF サービス ホストを閉じる必要があります。

一部のコードは、おおよそ次のようになります。

using System;
using System.ServiceModel;

namespace YourNameSpace
{
    public class WcfHostService : ServiceBase
    {
        private ServiceHost _serviceHost1 = null;
        private ServiceHost _serviceHost2 = null;

        protected override void OnStart(string[] args)
        {
            // instantiate new ServiceHost instances 
            if (_serviceHost1 == null)
            {
                _serviceHost1 = new ServiceHost(typeof(YourService1));
            }

            if (_serviceHost2 == null)
            {
                _serviceHost2 = new ServiceHost(typeof(YourService2));
            }

            // open service hosts
            _serviceHost1.Open();
            _serviceHost2.Open();
        }

        protected override void OnStop()
        {
            if (_serviceHost1.State != CommunicationState.Closed)
            {
                _serviceHost1.Close();
            }

            if (_serviceHost2.State != CommunicationState.Closed)
            {
                _serviceHost2.Close();
            }
        }
    }
}

NT サービスのメイン アプリでは、次のようになります。

var servicesToRun = new ServiceBase[] { new WcfHostService() };
ServiceBase.Run(servicesToRun);

それだけです、本当に!

于 2010-12-29T19:34:24.640 に答える
2

ServiceBaseこれは または の配列ではなく、 の配列であることに注意してくださいHostsBase。複数の Windows サービスを起動しているだけです。これは、WCF や AppDomains とは関係ありません。

于 2010-12-29T19:14:54.787 に答える