问题标签 [msmq]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1346 浏览

wcf - 具有多个端点和并发处理的 msmq

我已经构建了一个 WCF 负载平衡器/路由器,以有条件地将任何单向服务路由到多个端点,所有端点都使用 MSMQ 绑定。我还创建了一个主机,它使用路由器中的所有端点来接受服务调用。所有端点都指定相同的合同。

我需要同时处理每个队列(端点),但要按顺序处理每个服务调用。

我尝试过使用 InstanceContextMode = InstanceContextMode.Single 和 ConcurrencyMode = ConcurrencyMode.Single 但这只能让我使用单个实例来处理我的所有端点。InstanceContextMode = PerCall 不保证我需要的顺序。
我需要的是每个端点的单个服务实例,它将同时运行。

我还尝试了使用 ServiceBehavior 的各种排列

我将如何使用 MSMQ 绑定通过 WCF 完成此任务?

0 投票
3 回答
3731 浏览

msmq - 如果目标队列不存在,MSMQ 会丢弃消息吗?

我遇到了一个奇怪的情况:

消息从 ServerA 发送到 ServerB。它进入 ServerA 的传出队列,然后发送到 ServerB 的队列。

服务器 B 崩溃。我们不得不重新格式化。当我们提出它时,我们忘记了安装 MSMQ 服务。

消息开始在 ServerA 的传出队列中堆积,直到发送消息的程序抛出资源不足异常。

我们注意到错误并将 MSMQ 服务安装到 ServerB 上。ServerA 开始立即清空其传出队列。

当我们启动程序处理 ServerB 上的消息时,它无法连接。我们了解到我们忘记在 ServerB 上创建队列。然而,此时,为时已晚。位于 ServerA 队列中的所有 900K 消息都已发送到 ServerB。据我所知,ServerB 把它们扔掉了,因为它没有配置目标队列。我已经知道正确的解决方案是停止 ServerA 上的队列,直到我们完全设置了 ServerB。

问题是:这真的是我们应该期待的 MSMQ 的真实行为吗?我本以为更防御性的设计方法是让 ServerB 拒绝消息,而不是接受并丢弃它们。

0 投票
6 回答
69753 浏览

c# - 如何防止 WCF 服务进入故障状态?

我有一个不应进入故障状态的 WCF 服务。如果出现异常,则应将其记录下来,并且服务应继续不间断。该服务具有单向操作契约,并且正在从 MSMQ 读取消息。

我的问题有两个:

  1. 该服务似乎正在吞噬异常/故障,因此我无法对其进行调试。如何让服务公开异常以便我可以记录或处理它?
  2. 吞下此异常后,服务进入故障状态。如何防止服务进入故障状态?
0 投票
8 回答
5061 浏览

.net - ASP.NET - 新应用程序的最佳队列系统

我的组织正准备实施一个新系统,这是一个 asp.net 应用程序。该应用程序将有大量由网站启动的离线工作队列。该队列将保存不同类型的活动,最好是在 XML 消息中。想想电子邮件通知、计划任务等。

过去,该组织可能会使用 MSMQ 来完成此任务。然而,他们认为 MSMQ 是老派(我部分同意他们的观点),因此我们将进行架构审查以确定“最佳”解决方案。

在我看来,有几个潜在的选择:

1. 坚持在最新版本的 MSMQ 上使用新的实现 - 不理想,但已成为已知产品。
2. 使用 Windows Workflow Foundation,我从其他一些开发人员那里听说过使用它来做这类事情。
3. 开发自定义数据库解决方案。

我是否缺少任何明显的解决方案?理想情况下,这将是 Microsoft 产品,但实际上只需要在以 Microsoft 为中心的商店中工作。

我关心以下几点:
1. 易于实施和维护
2. 将存在一段时间的解决方案
3. 能够处理大量行,其中包含中等大小的 XML 数据
4. 绝对可靠的队列系统,快速更新(多个实用程序进程可能会从队列中抓取记录来处理它们)。

0 投票
2 回答
4564 浏览

wcf - 使用 Windows 服务通过 WCF 处理 MSMQ 消息

我们有一个解决方案,我们使用 Windows 服务来挑选消息。

Windows 服务每 2 分钟触发一次,并检索 MSMQ 消息以将其传递给 Web 服务。

  1. 我可以创建一个 WCF 服务,它会自动从 MSMQ 队列中提取消息吗?
  2. 如果 WCF 服务支持自动调用,我可以避免使用 Windows 服务吗?
0 投票
1 回答
1620 浏览

wcf - 在工作组模式下将新消息发布到专用队列时,WCF 服务从不通知

我正在使用 WCF (C#) 在工作组模式下在 Windows Server 2003 下从私有 MSMQ 队列发送/接收消息。

客户端 WCF/服务 WCF 和 MSMQ 在同一台计算机上。

有一个客户端将消息发送到私有队列,效果很好。有一个服务从同一个私有队列接收消息,但该服务似乎永远不会被 MSMQ 调用。(没有错误发生)

消息在队列中堆积,但没有任何内容被拉出。在另一台计算机(域模式而不是工作组模式)上,消息被完美地发送和接收。

导致 MSMQ 从不调用我的服务的工作组模式有什么问题?

之后,我编写了一个 C# 测试,总是在同一台计算机上,但这次我创建了 MessageQueue 并以这种方式订阅 ReceiveCompleted 事件:

现在有新消息时,我会从 MSMQ 队列接收事件。

我认为我的服务配置(WFC 配置)或命名空间保留存在问题。

0 投票
4 回答
35898 浏览

msmq - 连接到专用远程 MSMQ 队列

我正在尝试使用以下路径连接到远程私有 MSMQ 队列:

我收到以下错误:

我显然做错了什么。但是,这确实可以使用本地队列。

我正在使用 Spring.Net 的Messaging。这是我的配置

0 投票
11 回答
6775 浏览

sql - MSMQ v 数据库表

现有流程响应用户输入更改表中预订记录的状态字段。

我还有另一个进程要编写,它将为具有特定状态的记录异步运行。它将读取表记录,执行一些操作(包括调用第三方 Web 服务),并更新记录的状态字段以指示处理已完成(或 In Error,带有错误计数)。

这个操作听起来很像队列。在这种情况下,使用 MSMQ 而不是 SQL 表的好处和权衡是什么,我为什么要选择一个而不是另一个?

是我们的软件在表中添加和更新记录。

这是一项将执行异步处理的新工作(Windows 服务)。这需要“永远在线”。

0 投票
5 回答
509 浏览

wcf - 配置 WCF 安全设置

我有一个托管在 Windows 应用程序中的 WCF 服务。该服务使用 netMsmqBinding。客户端和主机位于不同的域中。我的问题是如何配置安全设置?

传输的数据很敏感,所以我想保护客户端和服务主机之间的通信。唯一的问题是我不知道该怎么做......(我不想使用证书)任何帮助将不胜感激!


James Schek:当我在没有安全性的情况下运行它时(无论 MSMQ 在哪里),它都能完美运行。在我的情况下,MSMQ 托管在服务器上,如果它关闭 - 那么客户端的消息将留在其传出队列中,当 MSMQ 重新启​​动并运行时,所有消息都会被发送 - 这是 MSMQ 的强大功能,也是预期的行为(这就是为什么通过 MSMQ 发送的所有消息都必须是 OneWay 的原因,因为我们不知道服务器或客户端何时在线 - 我们只希望消息传递)。

我们组织中的一位管理员问我是否有其他方式(而不是证书) - 这就是我问的原因(他想知道在这种情况下所有可能的保护方式)。

我处于工作组模式而不是域模式!所以我无法使用域...而且根本没有 AD。

0 投票
2 回答
504 浏览

.net - Impersonation when running a remote triggered job

My (.NET) app allows users to tweak database values. They will then need to generate reports based on their edits, either Crystal or Reporting Services, but that's not important - what is important is that the generation won't definitely be able occur on their local box, e.g. they might not have Crystal Reports (or whatever) installed on their machine.

So I've set up a Message Queue on a network machine (which can generate the reports) and my app will post a message to that queue sending along an object with all the required information. So far, so good.

I've configured the target queue with a rule and a trigger so any new message will automagically provoke a console app on that remote machine to attempt to deal with the message.

The problem is that although everything works fine, the triggered console app runs as the local machine account. The app needs to interact with the database (which uses integrated authentication).

The console app works perfectly when I run it as an actual user, but not when triggered by Message Queuing.

The question is, can I configure the rule, trigger or console app to run as a specific user? I've tried all the config options that I can seem to see, but to no avail.

Perhaps I can impersonate a user within the app's code itself (in app.config)? It's feasible in ASP.NET code, but not in WinForms code by the look of it.

Edit: The impersonation suggestion works well ... right up until the point when I get an error "Access is Denied" from the Process.Start() function, calling startwithcreateprocess().

The user I'm impersonating has permission to run the process on the local box (so it can run natively with no problems).