问题标签 [netmsmqbinding]
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.
c# - 队列显示为空
所以这对我来说很新,我正在取得进展。我目前有一个使用 netmsmqbinding 向队列发送简单消息的 wcf 服务。一切运行顺利,事件视图甚至说消息已放入队列。虽然当我进入实际队列时,那里什么都没有。我有一个服务、服务主机和 asp web 应用程序。请注意,在 Web 应用程序中,我有对该服务的服务引用。同样在事件查看器的 msmq 日志中,我得到 3 个事件。任何援助将不胜感激。谢谢。
这是我的设置。
服务接口:
服务:
服务的 App.Config:
服务主机
服务主机的App.Config:
MVC 控制器
Web.config 中的服务模型(自动生成):
MSMQ 日志中的事件:修改了其中的一些以在此处查看
ID 为 CN=msmq,CN=blah,OU=blah,OU=blah,DC=blah,DC=local\8280 的消息已发送到队列 PRIVATE=blah
ID 为 CN=msmq,CN=blah,OU=blah,OU=blah,DC=blah,DC=local\8280 的消息被放入队列 PRIVATE=blah
收到消息
c# - WCF MSMQ - 不同端口上的 SRMP
我有一个通过 MSMQ 将消息推送到 WCF 端点的应用程序。
在开发中,它在使用 MSMQ 协议时运行良好,但在生产中我需要做一个网络跃点。我需要进行设置,以便队列通过特定端口 (22200) 上的 HTTP 推送到 WCF 端点。
我认为这适用于 SRMP,但它不起作用。我的传出 MSMQ 挂起并显示“等待连接”消息。
我已经检查过了,我可以访问正确端口上的 URL。
我如何找出问题所在?
以下是我的客户端应用程序配置:
.net - MSMQ 传输错误
尝试发送具有“传输”安全性的消息时,我收到以下错误:
发送到队列时出错:不存在用户的内部消息队列证书。(-1072824273, 0xc00e002f)。确保 MSMQ 已安装并正在运行。如果要发送到本地队列,请确保队列存在并具有所需的访问模式和授权。
我的配置使用传输安全性:
我真的需要安装证书吗?我以为那只是为了证书级别的安全......
wcf - 在 WCF 分派消息之前,我在哪里可以找到 MSMQ 查找 ID?
我们有一个托管在 IIS 中的 WCF 服务,该服务具有netMsmqBinding
. 在将消息发送到我们的服务之前,我们希望记录MSMQ 查找 ID。我在哪里可以找到这些信息?
我们得到它是IErrorHandler
因为 anMsmqPoisonMessageException
有一个MessageLookupId属性。我们需要在请求开始时记录它,以便将异常与消息关联起来。
我认为 anIDispatchMessageInspector
是合适的地方,但我似乎无法在AfterReceiveRequest方法中找到任何可以为我提供查找 ID 的属性。
.net - 未从名称中带有下划线的队列中提取消息
我QueuedService.TicketingService.svc
在应用程序名称下托管在 IIS中的 WCF 服务QueuedService_1_1
。所以服务的完整 URL 是:
该服务有一个 net.msmq 端点:
我在 MSMQ 中创建了一个名为:
当我调用此服务时,消息被传递到队列,但没有被服务接收。当我在浏览器中点击服务 URL 时,服务会选择消息。
_1_1
IIS 应用程序名称和队列名称中的命名是否存在问题?因为当我在没有_1_1
ie的情况下QueuedService
在 IIS 和 queue named 中托管相同的服务时QueuedService/QueuedService.TicketingService.svc
,它可以工作。
c# - MSMQ 绑定不匹配
我们有一个曾经可以工作的设置,并且在过去几个月的某个时间停止了。我们使用配置中指定的自定义死信队列,但基本上设置如下:
我们已经开始收到这个错误,这似乎很清楚:
System.InvalidOperationException:绑定和 MSMQ 配置不匹配。无法发送消息。绑定中指定的自定义死信队列必须是事务队列。确保自定义死信队列地址正确且队列为事务队列。
我们已经验证了我们在配置中指向正确的队列并且该队列是事务性的。是否有任何其他问题可能导致抛出此异常,或者我们只是明显遗漏了一些东西?
更新:让我们的网络运营团队删除并重新创建队列,但仍然收到错误。
wcf - 由于 kerberos 时钟偏差,延迟到 WCF 服务的 MSMQ 消息失败
我在 IIS 上运行带有 netMsmqBinding 的 WCF 服务。它被配置为使用带有“Windows”客户端凭据类型的“消息”安全性,它使用 kerberos 来加密和签署消息。服务合同强制执行 ProtectionLevel.EncryptAndSign。值得注意的是,从客户端到服务正在使用事务。
当服务运行时,通信完美无缺。但是,为了测试延迟消息的持久性或当服务无法访问时,我在 IIS 中暂时禁用了该服务的应用程序池。然后我从客户端发送一条消息。它将传出队列留在客户端计算机上,然后传输到服务器上的专用队列。.NET MSMQ 侦听器获取消息并尝试调用 WCF 服务方法,但按预期失败。大约 10 分钟后,我重新启用了应用程序池。在服务跟踪日志中,记录了以下异常:
我还通过在服务器上使消息队列服务脱机来尝试相同的方案。结果是一样的。
我的猜测是客户端获得了 kerberos 票证来加密消息,但是因为消息在 10 分钟后被 WCF 服务解密(至少),所以它检测到时钟偏差。当然,我手动验证了客户端和服务器上的时钟,但它们是相同的。
客户端配置:
服务器配置:
这应该如何工作?我错过了什么?
编辑:
此页面确实说明了“使用 Kerberos 协议进行排队通信的问题在于密钥分发中心 (KDC) 分发的包含客户端身份的票证的寿命相对较短。”,但它并没有真正详细说明何时它可能很有用。
kerberos 消息安全的美妙之处在于它几乎可以开箱即用,有人应该考虑过这种情况,对吧?
编辑2:
我验证了两台服务器上的时间,两个客户端的偏差约为 0.1 秒(DC01 是域控制器):
和服务器:
c# - WCF:NetMsmq 的应用程序池暂停后的自定义 ServiceHostFactory 错误,但不是 Http
我创建了一个自定义主机工厂来支持基于容器的服务实例化和不完美的异步取消。该服务是在每次调用的基础上实例化的:
主要用途是通过 netmsmq 绑定,我注意到当我第一次启动应用程序时,客户端没有收到任何错误,MSMQ 只是保存数据,直到我通过 Web 浏览器通过 HTTP 访问服务,我不确定这个错误是否是此时产生。之后它将通过队列处理,直到应用程序池由于不活动而暂停(当前设置为 20 分钟)。然后我经常收到以下错误(但不是每个客户请求,今天早上我的事件日志中有大约 250 个错误,队列中有超过 1500 条消息等待):
似乎我的容器在 MSMQ 命中时未配置。目前我在 Global.asax.Application_Start 事件中调用我的引导程序,是否有更好的地方调用它?
wcf - WCF - 在新环境中找不到 MSMQ 端点
设置
我在 Windows Server 2012R2 上运行的 IIS/AppFabric 中托管了 WCF 服务。该服务通过 netMsmqBinding 绑定到本地事务性 MSMQ 队列。我的操作用 TransactionScopeRequired = true 修饰。服务操作接收来自 BizTalk 服务器的调用,处理它们并将响应发送回远程队列(在同一 BizTalk 服务器上),也通过 netMsmqBinding。
在测试环境中,这按预期工作。
测试环境中的物理设置:服务器 int01test.mydomain.com 托管 BizTalk 服务器和我的入站队列。这在服务帐户 mydomain\inttestuser 下运行。服务器 app01test.mydomain.com 托管我的应用程序 (IIS/AppFabric)、我的数据库 (SQL 服务器) 和我的出站队列。这在服务帐户 mydomain\apptestuser 下运行。
问题
当这个解决方案被提升到验收测试环境时,调用仍然被处理,但响应被阻止并显示错误消息:
System.ServiceModel.EndpointNotFoundException:打开队列时出错:无法识别的错误-1072824317(0xc00e0003)。无法从队列发送或接收消息。确保 MSMQ 已安装并正在运行。还要确保可以使用所需的访问模式和授权打开队列。---> System.ServiceModel.MsmqException:打开队列时出错:无法识别的错误-1072824317(0xc00e0003)。无法从队列发送或接收消息。确保 MSMQ 已安装并正在运行。还要确保可以使用所需的访问模式和授权打开队列。
差异
在测试环境中,我的服务和我的数据库在单个服务器实例上运行。(虽然 BizTalk Server 和它的队列,我的出站消息的目标,在另一台服务器上)在验收测试环境中,我的解决方案部署在两个负载平衡的服务器上,数据库在一个单独的集群上。还有更严格的外部防火墙规则来模仿生产环境。甚至 BizTalk 服务器也是集群的,尽管我们现在是机器对机器而不是集群对集群进行通信。
因此 QA 环境中的设置是:服务器 int01qa.mydomain.com(与 int02qa.mydomain.com 群集)托管 BizTalk 服务器和我的入站队列。这在服务帐户 mydomain\intqauser 下运行。服务器 app01qa.mydomain.com(与 app02qa.mydomain.com 集群)托管我的应用程序(IIS/AppFabric)和我的出站队列。这在服务帐户 mydomain\appqauser 下运行。服务器 db01qa.mydomain.com 托管我的数据库。
我们已经尝试过的
- 我们已禁用远程队列上的身份验证。
- 我们已授予运行我的服务的帐户以及“所有人”的完全控制权。
- 我们已经成功地在两台服务器之间手动发送了 msmq 消息。
- 我已将我的服务配置为向本地私有队列发送响应,同样的错误。
c# - 消息队列服务消息未到达
我已经通过消息队列获得了这个 WCF 服务。
服务配置如下:
像这样的绑定
非常基本的消息队列服务,在本地运行良好
在生成代理并调用函数后,消息就不会到达服务。停止服务时,它们不会进入任何队列,尽管有时您会看到一个很快出现在客户端计算机的传出队列中
跟踪文件说一切正常,只是它无法查看是否是事务性的。这是...
我不知道该尝试什么了,我会说它应该可以工作,但事实并非如此。我还能尝试什么?