Нужно ли, чтобы служба 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();
}
}