1

OnStart 関数である WCF Windows サービスがあります。

protected override void OnStart(string[] args)
{
  System.Diagnostics.Debugger.Launch(); //added for debugging for now
  _Host = new ServiceHost(typeof(Service));
  _Host.Open();
  _Manager = new Manager();
  _Manager.Start();
}

_Manager.Start() は、次の定義を持つ Agent.Start() を呼び出します (Execute

public void Start()
{
  _Thread = new Thread(new ThreadStart(Execute));
  _Thread.Start();
}

パラメータExecuteは次のような関数です

public void Execute()
{
  //mapping data stuff here
  //I put a break point at some line of code in this function
  //but it is not reached
}

Execute 関数のコードにブレークポイントを入れたのですが、F11 キーを押してステップ インしても、関数に移動しませんExecute

どういうわけか実行関数に入ります。実行関数のコードは次のようになります。

try
  { System.Messaging.Message amsg = _RequestQueue.Receive();
    /// other code
  }

この行を通過するたびに、デバッガーは失われます...それは静止したままで、他のアクションはありません。今どこにあるのかわかりません...

まことにありがとうございます。どんなアイデアでも大歓迎です。

4

1 に答える 1

1

ちょっとした思い..

  1. _Host.Open() に例外はありますか?
  2. スレッドが作成されていますか? Thread.Start() が呼び出されたということですか?

アタッチする前に Execute() 関数が操作を完了しない限り、アタッチできるはずです。

編集:

MSDN から、Revive() 関数 MessageQueue によって参照されるキューで使用可能な最初のメッセージを受信します。この呼び出しは同期的であり、メッセージが利用可能になるまで現在の実行スレッドをブロックします。

メッセージ キューに少なくとも 1 つのメッセージがありますか? そうしないと、スレッドがブロックされます。メッセージをキューに入れると、デバッガーがアクティブになることがわかります。

キューが正しく構成されていることを確認してください。

于 2013-11-05T09:19:26.777 に答える