0

WCF サービスを信頼できるものにする方法についていくつか質問があります。

セットアップ マイ サービスには 3 つの WCF サービスが含まれており、2 つは HTTP 経由の通常の Web サービスであり、もう 1 つは Protobuf を使用する TCP サービスです。TCP サービスは、Winform クライアントで可能な限り適切に機能するように、さまざまな方法でカスタマイズされています。

これは、Windows サービスでホストされます。

WCF プロジェクトには、ApplyConfiguration を使用してすべてのキャッシュ データを読み込む CustomHostServiceFactory が含まれています (すべてのサービスは、キャッシュがある場所と同じ BLL を使用します)。

protected override void ApplyConfiguration()
        {
            base.ApplyConfiguration();

            Startup();
        }

Windows サービスには、起動時に以下が含まれます

private ServiceHost StartService(Type serviceType)
        {
            ServiceHost serviceHost = null;

            // Create a ServiceHost for the CalculatorService type and 
            // provide the base address.
            Console.WriteLine("Creating service " + serviceType.FullName);
            serviceHost = new ServiceHost(serviceType);

            serviceHost.Opened += serviceHost_Opened;
            serviceHost.Closed += serviceHost_Closed;

            // Open the ServiceHostBase to create listeners and start 
            // listening for messages.
            Console.WriteLine("Starting service...");
            serviceHost.Open();
            Console.WriteLine("Service started successfully");
            Console.WriteLine("...");
            return serviceHost;

        }

このコードは、Windows サービスの Main(ServiceBase) と OnStart(override) の両方から使用されます。

問題 今、これが正しいことを確認する必要があります。これを設定する理由は何ですか? サービスは、起動時にキャッシュの初期化が実行される前に呼び出しを受け取ることができますか?

4

2 に答える 2

0

.Open()残念ながら、このサービスは が呼び出された後にのみリクエストを受け入れます。EndpointNotFoundExceptionまだ開いていない場合は発生します。

また、サービス自体の起動コード、つまり public ctor() は、最初のリクエストが届くまで実行されません。

于 2013-06-10T11:46:16.897 に答える
0

今、これが正しいことを確認する必要があります。これを設定する理由は何ですか? サービスは、起動時にキャッシュの初期化が実行される前に呼び出しを受け取ることができますか?

初期化コードが の前に実行されることを確認してserviceHost.Open();ください。

エンドポイントが使用可能になる前にクライアントがサービスを呼び出すと、クライアントは接続例外を受け取ります。エンドポイントが開いているときは、 init コードが の前に呼び出されOpen()、サービスがリクエストを処理する準備ができていることを確認できます。

于 2013-06-10T11:56:57.920 に答える