Tag: msmq

C#。 MSMQ。单个邮件的最大大小

使用msmq我想发送一条消息( 接近1 GB )。 我想发送字节数组 。 但我只能发送4 MB 。 我怎样才能解决这个限制?

如何以编程方式知道计算机上是否启用了消息队列?

我知道当我尝试创建新的MessageQueue ,如果未启用消息队列,系统将抛出InvalidOperationException 。 但是如何以编程方式知道机器上是否启用了消息队列? 我在两个不同的代码库中使用C#2.0和C#4.0。

没有网络依赖的进程间pubsub

假设我的计算机上没有安装网卡,我希望function类似于以下内容: 进程1将消息发布到某个URI,例如“Uri1” var publisher = new Publisher(“Uri1”); publisher.publish(new Message(“Somedata”); 进程2将监听“Uri1”上的消息并将消息发布到“Uri2” var subscriber = new Subscriber(“Uri1”) subscriber.MessageReceived += data => Console.Writeline(data.ToString()); var publisher = new Publisher(“Uri2”) publisher.Publish(new Message(“SomeMoreData”)) 进程3将侦听来自两个URI的消息 var subscriber = new Subscriber(“Uri1”) subscriber.MessageReceived += data => Console.Writeline(data.ToString()); var anotherSubscriber = new Subscriber(“Uri2”) anotherSubscriber.MessageReceived += data => Console.Writeline(data.ToString()); 所有进程都在同一台计算机上运行。 经过一些研究后,我相信MSMQ是可行的方法(使用队列名称作为URI),但实施问题仍然存在。 我遇到了几种可能性: 直接使用MSMQ 我用这种方法遇到的问题是我必须管理我自己的队列,例如创造,人口,清除…也从我读到的内容中我可能会遇到许多陷阱和MSMQ的局限性因为我没有经验 使用NServiceBus , […]

如何从私有工作组队列接收消息

我在远程计算机上有一个私人队列,每个人和匿名登录都有完全访问权限。 尝试接收时,以下代码生成并出错: var qpath = @”FormatName:DIRECT=TCP:xx.xx.xx.xx\PRIVATE$\QueueName”; var q = new MessageQueue(qpath); var msg = new Message(); msg.AttachSenderId = false; msg.Recoverable = true; msg.Body = “hello”; q.Send(msg); // <– this works! var recMsg = q.Receive(TimeSpan.Zero); // <– this breaks! 😐 错误消息是:消息队列服务不可用。 发送的消息最终在远程计算机的队列中 使用OS时会发生同样的情况:MachineName而不是TCP:xx.xx.xx.xx 队列服务器不是域的一部分。 有任何想法吗?

如何为MSMQ创建C#侦听器服务作为Windows服务

我首先要说的是我不是.NET开发人员,但是我已经被投入到需要使用MSMQ的项目中,所以经典的ASP Web应用程序可以将消息发送到处理处理的C#Windows服务。 我有将其他消息队列与其他语言集成的经验,但正如我所提到的,我对.NET和Windows开发没有太多经验,因此我们非常感谢一些指导。 这是我的问题…… 有人可以提供一些基本的C#代码来监听现有的MSMQ队列并通过执行一些简单的操作来响应新消息,例如将当前时间戳写入日志文件或发送电子邮件吗? 如何在Visual Studio .NET中打包此代码以创建和安装Windows服务? (它应该是什么类型的项目,等等。我正在使用Visual C#2010 Express。) 最后,我不确定我需要使用哪种版本和/或MSMQ实现来满足我对经典ASP的要求。 我认为COM版本是我需要的,但我也读过一个新的WCF版本,以及3.0和4.0之间的差异。 有人可以指点我应该使用哪个版本? 非常感谢!

无法确定是否存在具有指定格式名称的队列

执行以下代码时出现exception。 有什么想法有什么不对? string queueName = “FormatName:Direct=TCP:1.1.1.1\\Private$\\test”; MessageQueue queue; if (MessageQueue.Exists(queueName)) queue = new System.Messaging.MessageQueue(queueName); else queue = MessageQueue.Create(queueName); queue.Send(sWriter.ToString()); 编辑:这是exception消息和堆栈跟踪的第一行 无法确定是否存在具有指定格式名称的队列。 在System.Messaging.MessageQueue.Exists(String path) 顺便说一下,它适用于本地队列。

在进行事务处理时,消息未到达MSMQ

我在本地计算机上创建了一个私有MSMQ。 我使用以下C#代码将消息发送到队列。 当我将队列更改为事务时,消息未到达MSMQ。 但是,Send方法中没有抛出exception。 我需要做些什么改变才能让它发挥作用? using System; using System.Messaging; using System.Data; public partial class _Default : System.Web.UI.Page { //Sharing violation resulted from queue being open already for exclusive receive. MessageQueue helpRequestQueue = new MessageQueue(@”.\Private$\MyPrivateQueue”, false); protected void Page_Load(object sender, EventArgs e) { bool isTransactionalQueue = false; if (!System.Messaging.MessageQueue.Exists(@”.\Private$\MyPrivateQueue”)) { System.Messaging.MessageQueue.Create(@”.\Private$\MyPrivateQueue”, isTransactionalQueue); } SendMessage(); GetAllMessages(); } […]

如何研究.NET中的非托管内存泄漏?

我有一个在MSMQ上运行的WCF服务。 内存随着时间的推移逐渐增加,表明存在某种内存泄漏。 我在本地运行该服务并使用PerfMon监控一些计数器。 总CLR内存管理堆字节保持相对恒定,而进程的私有字节随时间增加。 这让我相信存在某种非托管内存泄漏。 假设非托管内存泄漏是问题,我该如何解决这个问题? 是否有任何工具可以用来向我提供有关导致非托管内存泄漏的提示? 此外,我的所有服务都是从事务队列中读取并写入数据库,所有这些都是DTC事务的一部分(通过要求服务合同上的事务来处理)。 我没有明确地使用COM或DllImports做任何事情。 提前致谢!

高负载服务器负载均衡,使用WCF和MSMQ

目前我正在开发一个空间数据处理服务器。 以下是要求: 服务器必须能够每秒接收和处理大约150-200条小消息(gps修复,一些其他数据)。 它必须是可扩展的。 例如,在多台机器上运行并平衡负载本身(没有nlb) 目前我已经测试过这种架构: 传入消息服务,仅负责获取消息(不带msmqwcf绑定) 消息解析器服务。 从msmq获取消息,解析它们并写入db,同时向下一个服务发送通知(再次使用普通的MSMQ互操作)。 这个可以在几台PC上工作 数据发布者服务。 包含小缓存并负责从db获取请求的数据。 通过wcf使用TCP绑定向客户端发送通知。 此外,所有服务都具有配置方法和通过WCF TCP绑定调用的一些其他任务。 小的性能测试表明它的工作速度非常快,但我想知道这是将这些MSMQ和WCF一起用于这个特定应用程序的最佳方式。 或者也许有人可以给我一个指导方向?

如何从消息队列中删除消息(只有格式良好)?

我想从一个队列中获取消息并将其发送到数据库。 我只想在特定格式下才能这样做。 如果我直接使用Receive方法并且在访问消息Body时发生了一些exception,则会丢失消息,因为MessageQueue Receive方法会从队列中删除消息。 为了避免丢失消息,现在我首先查看消息,如果格式良好,我使用Receive方法将其从队列中删除以将其发送到数据库。 我写的代码是这样的: Message msg = _queue.Peek(new TimeSpan(0, 0, LoggingService.Configuration.ReceiveTimeout)); // LogMessage is my own class which is adding some more stuff to original message from MessageQueue LogMessage message = null; if (msg != null) { if (!(msg.Formatter is BinaryMessageFormatter)) msg.Formatter = new BinaryMessageFormatter(); message = LogMessage.GetLogMessageFromFormattedString((string) msg.Body); // Use Receive method […]