问题标签 [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.

0 投票
1 回答
48 浏览

wcf - 几个月后消息队列失败

前几天我们在使用 MSMQ 时遇到了问题,我正试图了解发生了什么。

我们有大约 10 个服务相互发送消息。有些使用 WCF,有些直接使用 System.Messaging。

在某些时候,不会再发送一条消息,所有日志都会填满

“资源不足,无法执行此操作”

这些消息小于 4MB,并且已经运行了好几个月,所以消息大小不是问题。

进一步查看 msmq\storage 文件夹,其中有 1.07 GB 的消息文件,其中 950 MB 是以“j”开头的文件。

j0002f0e.mq j0002f0f.mq 等

这些消息代表日志文件,实际上,一个每天发送数千条消息的 (WCF) 服务启用了 useSourceJournal。所有这些文件的大小均为 4MB,最大它们都包含过去的多个队列消息。

现在这可能是原因吗?是否有 1GB 的限制,日志消息堆积起来,MSMQ 开始失败,然后一般资源不足?

是否应该每隔一段时间清除一次日志队列以使存储文件夹(几乎)为空?

0 投票
1 回答
554 浏览

wcf - 发送 MSMQ 消息时如何解决名称转换失败

我最近一直在关注这篇关于如何使用 MSMQ 设置 3 方队列系统的文章,其中发布者、队列服务器和订阅者都位于 Active Directory 域中的不同系统上。我已成功完成第 1 部分和第 2 部分的前半部分。但是,当我继续第 2 部分的后半部分并启用传输安全时,我收到以下错误:An error occurred when converting the 'mymsmqservermachine.mydomain.network.ads\private$\Path/To/MyQueuedService.svc' queue path name to the format name: Unrecognized error -1072824300 (0xc00e0014). All operations on the queued channel failed. Ensure that the queue address is valid. MSMQ must be installed with Active Directory integration enabled and access to it is available.

我已经验证了以下内容:

  1. 根据StackOverflow 帖子,在 3 方系统中的所有机器上都启用了 MSMQ 的 Active Directory 集成。
  2. 队列的 URL 与启用安全性之前完全相同,它工作得很好,没有任何解析错误。
  3. 在此处安装 MSMQ 时,我已按照 Windows 提供的说明进行操作。

我得到的堆栈跟踪的相关部分是:

根据堆栈跟踪的内容,故障似乎来自解析 Active Directory 中的队列名称。我尝试了以下方法来尝试解决此类故障:

  1. 简化名称以不包含句点或斜杠(不起作用)
  2. 如果 MSDN 上的原始教程中省略了此步骤,则使用公共队列而不是私有队列(它不是,没用)

在这一点上,我没有想法。有没有人在使用 WCF 和 net.msmq 绑定之前遇到过这个错误并解决了他们的问题?

编辑:当从同一台机器和同一用户运行以下测试代码时,我可以完美地向队列发送消息:

0 投票
1 回答
143 浏览

c# - 使用 MSMQ 时如何提供我的自定义证书?

有没有关于在 MSMQ 中使用外部证书的分步教程?

谢谢

0 投票
3 回答
840 浏览

wcf - 从 C# 读取 WCF MSMQ 消息

我使用 WCF 客户端向 WCF Service 发送 msmq 消息,在 WCF Service 处理 msmq 消息之前,我想检查消息的正文。
检查 msmq 消息正文的内容后,我得到以下结果。 但是,我没有得到确切的字符串。 以下是 WCF 服务的定义
在此处输入图像描述

我使用下面的方法来检索消息正文,它输出为空,如果我在 ms 上添加手表,我可以得到

"\0\u0001\0\u0001\u0004\u0002(net.msmq://vdi-v-tazho/private/TestQueue\u0003\aV\u0002\v\u0001s\u0004\v\u0001a\u0006V\bD\ n\u001e\0��+ http://tempuri.org/IMSMQService/ShowMessage@ \u0017VsDebuggerCausalityData\bAhttp://schemas.microsoft.com/vstudio/diagnostics/servicemodelsink�<��ϣ-lN��FoJ� 0�u\u0006�\"\0\0\0\0\u0017�\0i8�C�I\7�^Q�A\u0012�w}\f�A�\u000f\r����pe\0 \t\0\0D\f\u001e\0��(net.msmq://vdi-v-tazho/private/TestQueue\u0001V\u000e@\vShowMessage\b\u0013http://tempuri.org/@\ u0003msg�\u0004test\u0001\u0001\u0001"

0 投票
1 回答
4004 浏览

.net - 如何在 Azure 应用程序中使用 MSMQ

我目前的例子:

机器 A - PRIVATE 队列名称 - AdminQueue
机器 B - PRIVATE 队列名称 - ShippingOrders

我有一个在 Machine-A 中运行的控制台应用程序,它将消息推送到 PRIVATE 队列(机器 B- ShippingOrders)

我有一个托管在 IIS 中的 WCF 服务应用程序来使用来自“ShippingOrders”的这些消息并将响应发送回机器 A 的 AdminQueue。

是否可以使用来自 Azure 云应用程序的消息并将响应发送回 AdminQueue?Azure 中是否提供 MSMQ?

0 投票
1 回答
215 浏览

wcf - 我的 WCF 服务如何从不可用的消息队列中恢复?

我有一个从 Microsoft 消息队列 ( netMsmqBinding) 接收消息的 WCF 服务。

如果消息队列不可用,我希望我的服务能够恢复。我的代码应该无法打开服务,但在延迟后重试。

当队列不可用时,我有代码来识别错误:

所以这应该很简单:我调用ServiceHost.Open(),捕获这个异常,等待一两秒钟,然后重复直到我的Open调用成功。

问题是,如果这个异常被抛出一次,它会继续被抛出。消息队列可能已经可用,但我正在运行的进程处于错误状态,我会继续获取消息队列,TypeInitializationException直到我关闭我的进程并重新启动它。

有没有办法解决这个问题?我可以让 WCF 原谅队列并真正尝试再听一遍吗?


这是我的服务开放代码:

这是堆栈信息。第一次抛出内部异常的堆栈跟踪是:

System.ServiceModel.Channels.MsmqQueue.GetMsmqInformation(版本和版本,布尔值和 activeDirectoryEnabled)

System.ServiceModel.Channels.Msmq..cctor()

以及外部异常堆栈的顶部条目:

System.ServiceModel.Channels.MsmqChannelListenerBase`1.get_TransportManagerTable()

System.ServiceModel.Channels.TransportManagerContainer..ctor(TransportChannelListener 监听器)

0 投票
0 回答
16 浏览

c# - WCF 与 MSMQ 测试

我有一个 [ServiceContract] MyServiceContract,其中一些方法用 [OperationContract(IsOneWay = true)] 装饰。其中一种方法称为 LoadFile。

我有一个带有 NetMsmqBinding (ExactlyOnce = true) 和 EndPointAddress("net.msmq://localhost/private/MyService.svc") 的 ChannelFactory。

我有一个 MSMQ 设置为事务性并命名为“MyService.svc”。

在我的应用程序中,有时我调用 ChannelFactory.CreateChannel 来获取 MyService 的具体实例(它实现了 MyServiceContract)。

当我在该实例上调用 LoadFile 时,它​​会向我的 MSMQ 发送一条消息。

当我在发布环境中运行时,转到我的 MSMQ 的 LoadFile 方法会被取消并执行。

当我在本地机器测试环境中运行时,转到我的 MSMQ 的 LoadFile 方法就在那里。

我怀疑 MyService 没有运行。但如果是这样的话,我不知道如何开始。

0 投票
0 回答
48 浏览

c# - WCF '故障 System.ServiceModel.Channels.MsmqInputChannel'

我收到错误 System.ServiceModel.Channels错误。重现此错误的一个原因是服务器上是否有未处理的异常。

整个代码都包含在 try catch 中,因此不会发生这种情况。我的问题是还有什么其他的事情可以触发这个异常。我们在一个环境中超越了例外。

下面是我的堆栈跟踪

System.ServiceModel.Channels.CommunicationObject.ThrowIfAborted() System.ServiceModel.Channels.InputQueueChannel 1.EndDequeue(IAsyncResult result, TDisposable&amp; item) System.ServiceModel.Channels.ReplyChannel.EndTryReceiveRequest(IAsyncResult result, RequestContext&amp; context) System.ServiceModel.Dispatcher.ReplyChannelBinder.EndTryReceive(IAsyncResult result, RequestContext&amp; requestContext) System.ServiceModel.Dispatcher.ErrorHandlingReceiver.EndTryReceive(IAsyncResult result, RequestContext&amp; requestContext) System.ServiceModel.Dispatcher.ChannelHandler.EndTryReceive(IAsyncResult result, RequestContext&amp; requestContext) System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result) System.ServiceModel.Dispatcher.ChannelHandler.OnAsyncReceiveComplete(IAsyncResult result) System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result) System.Runtime.AsyncResult.Complete(Boolean completedSynchronously) System.Runtime.InputQueue1.AsyncQueueReader.Set(Item item) System.Runtime.InputQueue1.Shutdown(Func1 pendingExceptionGenerator) System.ServiceModel.Channels.InputQueueChannel`1.OnClosing() System.ServiceModel.Channels.CommunicationObject.Abort() System.ServiceModel.Dispatcher.ListenerHandler.AbortChannels() System.ServiceModel.Dispatcher.ListenerHandler.OnAbort() 系统.ServiceModel.Channels.CommunicationObject.Abort() System.ServiceModel.Dispatcher.ChannelDispatcher.OnAbort() System.ServiceModel.Channels.CommunicationObject.Abort() System.ServiceModel.ServiceHostBase.OnServiceHostFaulted(Object sender, EventArgs args) System.ServiceModel。 Channels.CommunicationObject.OnFaulted() System.ServiceModel.Channels.CommunicationObject.Fault() System.ServiceModel.ServiceHostBase.OnChannelDispatcherFaulted(Object sender, EventArgs e) System.ServiceModel.Channels.CommunicationObject.OnFaulted() System.ServiceModel.Channels.CommunicationObject .Fault() System.ServiceModel.Dispatcher.ChannelDispatcher.OnListenerFaulted(Object sender, EventArgs e) System.ServiceModel.Channels.CommunicationObject.OnFaulted() System.ServiceModel.Channels.CommunicationObject.Fault() System.ServiceModel.Channels.Msmq4PoisonHandler.InternalFinalDisposition (MsmqQueue disposeFromQueue, MsmqMessageProperty messageProperty) System.ServiceModel.Channels.Msmq4PoisonHandler.FinalDisposition(MsmqMessageProperty messageProperty) System.ServiceModel.Channels.MsmqDecodeHelper.DecodeTransportDatagram(MsmqInputChannelListener listener, MsmqReceiveHelper receiver, MsmqInputMessage msmqMessage, MsmqMessageProperty messagePropertyInputChannels) System. DecodeMsmqMessage(MsmqInputMessage msmqMessage, MsmqMessageProperty messageProperty) System.ServiceModel.Channels.MsmqInputChannelBase。TryReceive(TimeSpan 超时,消息和消息) System.ServiceModel.Dispatcher.InputChannelBinder.TryReceive(TimeSpan 超时,RequestContext& requestContext) System.ServiceModel.Dispatcher.ErrorHandlingReceiver.TryReceive(TimeSpan 超时,RequestContext& requestContext) System.ServiceModel.Dispatcher.ChannelHandler.TryReceive( TimeSpan 超时,RequestContext& requestContext) System.ServiceModel.Dispatcher.ChannelHandler.SyncMessagePump() System.ServiceModel.Dispatcher.ChannelHandler.OnStartSyncMessagePump(Object state) System.Runtime.IOThreadScheduler.ScheduledOverlapped.IOCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped) System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 错误,UInt32 bytesRead,NativeOverlapped* nativeOverlapped) System.Threading._IOCompletionCallback。PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)