Нужно ли, чтобы служба WCF для Windows Forms находилась в фоновом потоке?

Я искал и искал и видел вопросы, похожие, но не конкретные, к этому.

Я делаю установку WCF на основе MSMQ для запросов / ответов, где клиент Windows Forms отправляет сообщение MSF MSMQ службе, которая выполняет длительный процесс, и использует строку, переданную клиентом, для помещения обновлений статуса в очередь. на клиенте. Клиент должен самостоятельно разместить службу, основанную на WCM MSMQ, которая принимает и отвечает на сообщения о состоянии.

Проблема в том, что даже при открытии узла в Program.cs и ожидании его закрытия до FormClose, в том, что при запуске форма Windows обрабатывает ОДНО сообщение, находящееся в очереди (после предыдущего запуска), и не более, Это похоже на какую-то проблему с потоками. Тем не менее, все примеры, которые я видел, выглядят так, будто все в порядке, это сделать host.open() в форме create или startup и host.close() при завершении работы, и он должен нормально воспринимать сообщения.

Если у кого-нибудь есть такой пример, когда входящие сообщения msmq WCF будут приниматься всякий раз, когда они поступают, а пользовательский интерфейс остается отзывчивым, пожалуйста, дайте мне знать.

Чтобы убедиться, что служба и очередь настроены правильно, я сделал простой автономный библиотечный проект 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();

        }

    }

0 ответов

Другие вопросы по тегам