标签: msmq

msmq中没有消息

我编写了一个将消息添加到本地队列的控制台应用程序.但是,没有插入任何消息.

我将队列创建为事务性并插入如下:

      string path = @"FormatName:DIRECT=OS:computername\private$\myqueue";
        MessageQueue queue = new MessageQueue();
        queue.Path = path;            

        foreach (string msg in messages)
        {
            queue.Send("inputMessage", msg);

        }
Run Code Online (Sandbox Code Playgroud)

这有什么不对吗?

谢谢.

c# msmq

2
推荐指数
1
解决办法
3331
查看次数

MSMQ + C#,接收带有编码byte []主体的消息在Windows 7与Windows XP上的行为有所不同

我有一个应用程序,显示MSMQ消息队列中的消息的内容.Windows 7上的MSMQ存在问题,而不是保留邮件正文中数据的真实对象类型.在这个例子中,我发送一个byte [],然后当我收到它时,它不再是一个字节数组,而是包装的XML容器文档.在Windows XP中,我从未遇到过此问题,并且Message.Body属性始终正确设置为byte [].

这是压缩代码:

    public void SendWithCompression(string Message)
    {
        try
        {
            // Compress the message data in memory.
            byte[] UncompressedData = Encoding.UTF8.GetBytes(Message);
            byte[] CompressedData = null;

            MemoryStream s = new MemoryStream();
            using (GZipStream z = new GZipStream(s, CompressionMode.Compress))
            {
                z.Write(UncompressedData, 0, UncompressedData.Length);
            }
            CompressedData = s.ToArray();

            if (_Transaction != null)
            {
                _Transaction.Begin();
                base.Send(CompressedData, _Transaction);
                _Transaction.Commit();
            }
            else
            {
                base.Send(CompressedData);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
Run Code Online (Sandbox Code Playgroud)

以下是测试消息的消息内容.它最终成为包装编码二进制数据的XML文档: <?xml version="1.0"?>..<base64Binary>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Ih63edMefTsvy2rv8V3+4/8ByygBlxMAAAA=</base64Binary>


以下是它使用的解压缩代码:

        String Data;
        //Get message and format …
Run Code Online (Sandbox Code Playgroud)

.net c# msmq windows-7

2
推荐指数
1
解决办法
6852
查看次数

工作流服务在464条消息后停止响应

我在执行工作流程时遇到了一个特殊问题.
我已经尝试了我能想到的一切,现在需要一些想法.

这是我的配置:
1.在IIS 7中托管的WF4工作流服务(xamlx),并使用net.msmq/netMsmqBinding进行传输(MSMQ是事务性的).
2.没有使用工作流持久性.
3.我使用控制台应用程序客户端向工作流发送消息(每条消息创建新的工作流).4.每个工作流程如下:等待START消息 - >等待END消息(我只发送START消息).

如果我发送500条消息 - 464正确处理,但超过该消息,所有消息都转到lock_*队列,然后移动到毒性队列.我检查过Debug,Analytic事件日志,以及消息和跟踪svclogs这是我得到的最详细的消息:

System.TimeoutException,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089操作未在分配的超时00:00:30内完成.分配给此操作的时间可能是较长超时的一部分.at System.Runtime.AsyncResult.End [TAsyncResult](IAsyncResult结果)System.ServiceModel.Activities.Dispatcher.PersistenceProviderDirectory.LoadOrCreateAsyncResult.HandleReserveThrottle(IAsyncResult result)at System.Runtime.AsyncResult.AsyncCompletionWrapperCallback(IAsyncResult result)System.TimeoutException:The操作未在指定的超时00:00:30内完成.分配给此操作的时间可能是较长超时的一部分.at System.Runtime.AsyncResult.End [TAsyncResult](IAsyncResult结果)位于System.Runtime.AsyncResult.AsyncCompletionWrapperCallback(IAsyncResult结果)的System.ServiceModel.Activities.Dispatcher.PersistenceProviderDirectory.LoadOrCreateAsyncResult.HandleReserveThrottle(IAsyncResult result)

那时请求http://localhost/MyWebService?wsdl也失败了404.

如果我重新启动IIS - 一切都恢复正常,直到发送464条消息.

  1. 我在哪里可以找到更详细的日志?(我已将System.Diagnostics设置为max verbosity)
  2. 是464号魔法吗?
  3. 导致此Web服务锁定的原因是什么?

msmq workflowservice workflow-foundation-4

2
推荐指数
1
解决办法
1354
查看次数

使用多个接收器广播消息

我有一个mainform发送消息和随机数量的接收表单作为单独的应用程序运行(C#4.0).

每当随机数量的表单中的一个接收到消息,而不是接收消息而其他表单将不再接收消息.

我用UDP,TCP IP,MSMQ尝试了这个,但我似乎没有让它运行良好.发送方和接收方在同一系统上运行.

任何人都可以推荐我一种方式来广播一种消息,该消息保持在一种队列中,直到所有表单都收到它,或者它可以保留在队列中直到应用程序关闭,但是如何...?

在此先感谢大家!

亲切的问候韦斯利

c# message udp tcp msmq

2
推荐指数
1
解决办法
2393
查看次数

为什么这个简单的MSMQ交易升级为DTC?

我已经减少了一个问题,我需要以下示例代码:

var inQueue = ".\private$\testqueue";
using (var ts = new TransactionScope())
{
    using (var q = new MessageQueue(inQueue, QueueAccessMode.Send))
    {
        for (var i = 0; i < 100000; ++i)
        {
            var msg = new Message(i);
            q.Send(msg, MessageQueueTransactionType.Automatic);
        }
    }
    ts.Complete();
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它使用TransactionScope模式将100,000个整数写入(事务性,本地)队列.我的理解是这种类型的操作不会升级为DTC交易.

但是,如果我在运行时打开组件服务,我可以在本地DTC>事务列表中看到该事务.这意味着交易已经升级,对吧?

为什么会这样?我在另一个程序中因性能不佳而被提示,并且看起来使用DTC进行这样一个简单的事务可能是一个因素.无论如何,我只想了解原因.

任何帮助,将不胜感激.

msmq message-queue transactionscope

2
推荐指数
1
解决办法
1713
查看次数

向MSMQ发送序列化数据时抛出InvalidCastException

我尝试将序列化数据发送到MSMQ,但得到"System.InvalidCastException:指定的强制转换无效".错误.我把我的发送方法和日志跟随.请建议我解决此错误.

    // Here MyMessage is my class which contain some
    // stuff which I want to pass to MSMQ.
    public void Send(MyMessage myMessage)
    {
        XmlSerializer ser = new XmlSerializer(typeof(MyMessage));
        StringBuilder sb = new StringBuilder();

        using (StringWriter writer = new StringWriter())
        {
            ser.Serialize(writer, myMessage);

            Debug.WriteLine(writer.ToString());
        }
      Message _myMessage = new Message(myMessage, new BinaryMessageFormatter());
      //_messageQueue is object of MSMQMessage
      _messageQueue.Send(_myMessage);
     }
Run Code Online (Sandbox Code Playgroud)

记录:

System.InvalidCastException:指定的强制转换无效."在MyClassName.Send(MyMessage myMessage)

建议:我认为这个错误是由于"typeof"而发生的,但我不确定在那方面.

.net c# msmq xml-serialization

2
推荐指数
1
解决办法
880
查看次数

使用BeginPeek后,我是否有义务致电EndPeek?

我有一个处理私有本地消息队列(MSMQ)的Windows服务.当它启动时,它PeekCompleted在队列上注册一个事件处理程序,然后调用异步BeginPeek()以等待消息到达.

protected override void OnStart(string[] args)
{
    if (String.IsNullOrWhiteSpace(args[0]))
        return;

    queue = new MessageQueue(args[0]);
    queue.Formatter = new BinaryMessageFormatter();
    queue.PeekCompleted += new PeekCompletedEventHandler(OnPeekCompleted);

    queue.BeginPeek();
}
Run Code Online (Sandbox Code Playgroud)

一旦消息到达,我的目标是显然处理该消息.我的代码目前有一个queue.Receive()获取消息的方法,包含在一个事务中,以便在处理过程中出现错误时将消息放回队列.BeginPeek()再次调用以重新启动循环.

private static void OnPeekCompleted(Object source, PeekCompletedEventArgs asyncResult)
{
    try
    {
        MessageQueue q = (MessageQueue)source;

        using (MessageQueueTransaction trans = new MessageQueueTransaction())
        {
            trans.Begin();

            Message msg = q.Receive(trans);
            ProcessMessage(msg);

            trans.Commit();
         }

         // Restart the asynchronous peek operation.
         q.BeginPeek();
    }
    catch (MessageQueueException qEx)
    {
        // TODO: Walk it off.
    } …
Run Code Online (Sandbox Code Playgroud)

c# msmq peek msmq-transaction

2
推荐指数
1
解决办法
1494
查看次数

尝试从Message访问Body时出现InvalidOperationException

我尝试访问Windows消息队列的消息:

var activeQueue = new MessageQueue("\\myhost\\private$\\just.a.queue", QueueAccessMode.Receive);
foreach(message in _activeQueue.GetAllMessages().ToList()) {
   Console.WriteLine(message.Body);
}
Run Code Online (Sandbox Code Playgroud)

我在尝试访问时收到InvalidOperationException message.Body(并且几乎除Id之外的所有其他属性 - 字段).

c# msmq message-queue

2
推荐指数
1
解决办法
791
查看次数

MSMQ消息在到达远程服务器时消失

我必须在同一域中的两个服务器之间创建MSMQ消息传递机制,SenderServer(MS Server 2012)和ReceiverServer(MS Server 2008 R2).

我在ReceiverServer中 创建了一个私有的事务性队列.\private$\receiver,我向系统和管理员提供了接收(和查看)消息权限.

然后,我创建了一个客户端应用程序,使用以下代码创建消息并将消息转发到队列:

MessageQueue queue = new queue("FormatName:Direct=OS:ReceiverServer\private$\receiver");
Message message = new Message();
message.Body = "myMessage";

using (MessageQueueTransaction tx = new MessageQueueTransaction())
{
  tx.Begin();
  queue.Send(message, "myLabel", tx);
  tx.Commit();
}
Run Code Online (Sandbox Code Playgroud)

在部署应用程序之前,我在我的机器(Windows 7)上测试了它,它Direct=OS:ReceiverServer\private$\receiver使用State:Connected和正确地创建了一个传出队列Connection History:Connection is ready to transfer messages.消息被正确发送到ReceiverServer并放入\private$\receiver队列中.在End2End log该的ReceiverServer为每封邮件记录两个事件:

  1. 消息来自网络(EventId:4)
  2. 消息ID CN=msmq, CN=[mymachinename], CN=Computers, DC=[domain], DC=[other]已被放入队列ReceiverServer\private$\receiver(EventId:1)

然后我使用相同的代码在SenderServer中 …

msmq system.messaging

2
推荐指数
1
解决办法
1485
查看次数

我们是否可以在MSMQ中添加消息以供将来处理

我正在尝试创建一个MSMQ解决方案,并且对于某些消息,我希望它们仅在下午6点后处理,所以在MSMQ中有一种方法可以在Future中处理消息吗?

msmq

2
推荐指数
1
解决办法
96
查看次数