1

我已经搜索和搜索并看到了与此类似但不具体的问题。

我正在执行基于 msmq 的请求/响应 WCF 设置,其中 Windows 窗体客户端将 msmq WCF 消息发送到服务,该服务运行一个长时间运行的进程,并使用客户端传递的字符串将状态更新放入队列中在客户端。客户端应自行托管一个基于 WCF MSMQ 的服务,该服务会拾取并响应状态消息。

问题是,即使在 Program.cs 中打开主机并等待关闭它直到 FormClose,在启动时,Windows 窗体将处理队列中的一条消息(上次运行的剩余消息),不再处理. 感觉像是某种线程问题。但是,我看到的所有示例似乎都可以在 create 或 startup 形式中执行 host.open() ,在关闭时执行 host.close() ,它应该可以很好地接收消息。

如果有人有这样做的示例,其中 WCF 传入的 msmq 消息将在它们到达时被拾取,而 UI 保持响应,请告诉我。

值得一提的是,为了确保正确配置服务和队列,我使用相同的配置和源文件做了一个简单的 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();

        }

    }
4

0 回答 0