私はこれに似た質問を検索して検索し、見ましたが、これに固有のものではありません。
msmq ベースの要求/応答 WCF セットアップを行っています。この場合、Windows フォーム クライアントは msmq WCF メッセージをサービスに送信します。サービスは長時間実行されるプロセスを実行し、クライアントから渡されたアドレス指定された文字列を使用して、ステータスの更新をキューに入れます。クライアントで。クライアントは、ステータス メッセージを取得して応答する WCF MSMQ ベースのサービスを自己ホストする必要があります。
問題は、Program.cs でホストを開き、FormClose までそれを閉じるのを待っていても、起動時に、Windows フォームがキューにある 1 つのメッセージ (前回の実行からの残り) を処理し、それ以上処理しないことです。 . ある種のスレッドの問題のように感じます。ただし、私が見たすべての例は、作成または起動のフォームで host.open() を実行し、シャットダウン時に host.close() を実行しても問題ないように動作するように見え、メッセージを正常に取得する必要があります。
UI の応答性を維持しながら、WCF 着信 msmq メッセージが到着するたびに取得される例があれば、教えてください。
サービスとキューが正しく構成されていることを確認するために、同じ構成ファイルとソース ファイルを使用して単純な WCF スタンドアロン ライブラリ プロジェクトを作成し、キュー内のすべてのメッセージを正常に処理しました。正しく動作していない WinForms アプリで自己ホストしようとしているだけです。
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public partial class frmStart : Form, IExportStatus
{
private void frmStart_Load(object sender, EventArgs e)
{
if (host == null || host.State != CommunicationState.Opened)
{
host = new ServiceHost(this);
// ServiceHostGlobal.AddServiceEndpoint(typeof(IExportStatus), Binding, endpointAddress);
// Open the ServiceHostBase to create listeners and start listening for order status messages.
host.Open();
}
}