2016-09-26 2 views
0

私は、クラスライブラリでホストされている(httpを使用しない)名前付きパイプ(wcfを使用しない)を持っています。私は、クラスライブラリに以下の方法を使用してWCFを開始することができる午前:ボタンクリックから以下を実行しているのWinFormsテストプログラムから独自のクラスコンストラクタからWCFを開始

ServiceHost serviceHost; 
public void startService() 
{ 
    // Create the service host 
    ... 
    // Open Service Host 
    serviceHost.Open(); 
} 

そして:

MyClassLib.MySvc testSvc; 
private void button2_Click(object sender, EventArgs e) 
{ 
    testSvc = new MyClassLib.MySvc(); 
    testSvc.startService(); 
} 

これが正常に起動しませんWCFはクラスライブラリで実行されます。

しかし、これには、startServiceメソッドを呼び出すためにクラスライブラリを参照しているwinformsが必要です。

私が望むのは、WCFを実行するクラスライブラリへの参照が完了するとただちにサービスを開始できることです。

私はクラスライブラリサービスのコンストラクタに以下を追加しようとしてきた。そして、

public MySvc() 
{ 
    startService(); 
} 

そして、リサイズからインスタンス化:

MyClassLib.MySvc testSvc; 
private void button2_Click(object sender, EventArgs e) 
{ 
    testSvc = new MyClassLib.MySvc(); 
    //testSvc.startService(); //No need to call this 
} 

私は、コードをデバッグする場合、私はその中を見ることができます実際にはこの時点で中断します:

public MySvc() 
{ 
    startService(); // It does run this but service does not start 
} 

しかし、これはサービスを実行しません。どんな助けもありがとう。

注#1:私はコンストラクタメソッドでサービスを開始させることはできませんが、そのことはわかりません。

+0

あなたは 'MySvc'が、しかし、あなたのコードではどのようなものコンストラクタを呼び出しているのコンストラクタを持っていますか? (ヒント:おそらく何もない)。エントリポイントが必要です。あなたのWinformsアプリケーションを見てください。静的 'Main'メソッドを持つProgram.csファイルがあります。それがエントリーポイントです。 – helrich

+0

コンストラクタは、クラスライブラリ内のサービスクラスの名前です。そして、私はwinformsからクラスライブラリをインスタンス化するときに呼び出されています。それはstartServiceメソッドを呼び出しても、サービスはそのようには起動しません。 –

答えて

1

問題が解決しました。タイミングの問題だったと私は仮定しています(注#1を参照)。これに

public MySvc() 
{ 
    startService(); // It does run this but service does not start 
} 

と問題は解決::複製すること

は、これを変更

public void delayStartService() 
{ 
    Task.Delay(1000).ContinueWith(t => startService()); 
} 

public MySvc() 
{ 
    delayStartService(); 
} 
+0

'Task.Delay(1000).ContinueWith'これはあなたの気分を良くしますか?なぜ1000?なぜ10または10000ではないのですか?それは毎回動作するのでしょうか?... –

+0

それは私を正しく感じますか?それはあなたの気分を良くしますか?ポンド。あなた自身の使用のためにさらなるテストを自由にしてください。また、あなたが望むならば、より良い解決策を投稿することも自由です。 –

+0

私は経験的なタイミングに依存しないより良いものを投稿することができますが、この反応の後ではありません。あなたの解決策を進めてください。 –

関連する問題