通过 HTTP 使用 MSMQ。如何解决队列问题?

2023-11-27

我目前正在尝试将 MSMQ 与 C# 和 .NET 结合使用以实现 IPC。 我试图理解它是如何工作的,但我对它很困惑访问 MSMQ 队列时路径名称和格式名称之间的差异。 我在以下帖子中发现了一些类似的问题:

  1. 通过 HTTP 的 MSMQ 调用未到达目标队列
  2. 如何设置 MSMQ 服务器以便可以通过 Internet 访问它
  3. 如何通过相应的 WCF 绑定使用 MSMQ over http?

不过,他们都在使用MSMQ和WCF,我暂时不想使用WCF。

我想要实现的目标如下:

Client:通过将数据发送到队列http.

Server:通过以下方式从队列接收数据http.

我的观点是我想要服务器、客户端和队列托管在可能不同的计算机上。 (现在我正在同一台机器上测试所有内容)。

这里我有以下代码,它演示了我的想法:

首先,我创建队列:

if(!System.Messaging.MessageQueue.Exists(@".\Private$\SimplestExamplePrivateQueue");
    System.Messaging.MessageQueue.Create(@".\Private$\SimplestExamplePrivateQueue");

客户端代码:

然后,在客户端,我有一个回调函数,当用户按下按钮以发送消息时会调用该回调函数。

private void button1_Click(object sender, System.EventArgs e)
{
    try
    {           
        // Create a connection to the queue
        System.Messaging.MessageQueue mq = new System.Messaging.MessageQueue(@"FormatName:Direct=http://localhost/msmq/Private$/SimplestExamplePrivateQueue");

        // Create a point object to send
        Point myPoint = new Point (Convert.ToInt32(textBox2.Text), Convert.ToInt32(textBox3.Text)) ;

        // Send object 
        mq.Send (myPoint) ;
    }

    // Catch the exception that signals all types of error
    // from the message queueing subsystem. Report error
        // to the user. 
    catch (System.Messaging.MessageQueueException mqx)
    {
        MessageBox.Show (mqx.Message) ;
    }

到这里为止一切都正常。

服务器代码:

然后,我有一个按钮,它调用回调函数以从服务器端的队列中同步读取一条消息:

private void button1_Click(object sender, EventArgs e)
{
    try
    {
        // Create a connection to the queue
        var mq = new MessageQueue(@"Direct=http://localhost/msmq/Private$/SimplestExamplePrivateQueue");

        // Set the queue's formatter to decode Point objects
        mq.Formatter = new XmlMessageFormatter(new[] {typeof (Point)});

        // Receive message synchronously
        Message msg = mq.Receive();

        // Convert received message to object that we think was sent
        var pt = (Point) msg.Body;

        // Display it to the user
        MessageBox.Show(pt.ToString(), "Received Point");
    }

    // Report any exceptions to the user. A timeout would cause such
    // an exception
    catch (Exception x)
    {
        MessageBox.Show(x.Message);
    }
}

以我对 MSMQ 的(有限)理解,这应该可行。然而,当我打电话时Message msg = mq.Receive();我得到以下异常:

The specified format name does not support the requested operation. For example, a direct queue format name cannot be deleted.

和堆栈跟踪:

at System.Messaging.MessageQueue.MQCacheableInfo.get_ReadHandle()
   at System.Messaging.MessageQueue.StaleSafeReceiveMessage(UInt32 timeout, Int32 action, MQPROPS properties, NativeOverlapped* overlapped, ReceiveCallback receiveCallback, CursorHandle cursorHandle, IntPtr transaction)
   at System.Messaging.MessageQueue.ReceiveCurrent(TimeSpan timeout, Int32 action, CursorHandle cursor, MessagePropertyFilter filter, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType)
   at System.Messaging.MessageQueue.Receive()
   at InternetQueueingRecipient.Form1.button1_Click(Object sender, EventArgs e) in c:\Users\felipedalcin\Documents\MSMQ\MSMQandNET\InternetQueuing\InternetQueueingRecipient\Form1.cs:line 85

有谁知道我如何调试这个,或者即使我想做的事情可以通过这些方式实现?


指定 HTTP 或 HTTPS 协议的直接格式名称不能用于查看或接收消息,只能用于发送消息

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 HTTP 使用 MSMQ。如何解决队列问题? 的相关文章

  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • 当我们想要返回对象的引用时,为什么我们在赋值运算符中返回 *this 而通常(而不是 this)?

    我正在学习 C 和指针 我以为我理解了指针 直到我看到这个 一方面 asterix 运算符是解引用的 这意味着它返回值所指向的地址中的值 而与号 运算符则相反 它返回值存储的地址记忆 现在阅读有关赋值重载的内 容 它说 我们返回 this因
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 如何使用 LINQ2SQL 连接两个不同上下文的表?

    我的应用程序中有 2 个数据上下文 不同的数据库 并且需要能够通过上下文 B 中的表的右连接来查询上下文 A 中的表 我该如何在 LINQ2SQL 中执行此操作 Why 我们正在使用 SaaS 产品来跟踪我们的时间 项目等 并希望向该产品发
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • 以最快的方式处理大数据集的豪斯多夫距离

    我的数据集中的行数超过 500000 我需要每个的豪斯多夫距离id自己与他人之间 并对整个数据集重复此操作 我有一个巨大的数据集 这是小部分 df id easy ordinal latitude longitude epoch day o
  • 如何确认异步 EF6 wait db.SaveChangesAsync() 是否按预期工作?

    我的代码如下所示 public async Task
  • C 文件操作:检查打开的文件指针访问模式

    一个简单的问题 如何检查已打开的文件指针的访问模式 假设一个函数传递了一个已经打开的 FILE 指针 Pseudo code bool PseudoFunction FILE Ptr if Insert check for read onl
  • asp.net 身份获取登录用户的所有角色

    我创建了一个基于角色的菜单 并遵循该菜单this教程 在该页面的某些位置您会看到这行代码 String roles Roles GetRolesForUser 它返回当前登录用户的所有角色 我想知道如何使用新的 ASP NET Identi
  • Swift 2 中的 HTTP POST 错误处理

    我是新来的 这是我的第一个问题 我尝试在 Swift 2 中编写一个发出 HTTP POST 请求的应用程序 但我不知道如何使用 Swift 2 的新错误处理 任何人都可以告诉我如何实现 尝试捕捉 Swift 2 对下面代码片段的错误处理
  • JavaScript 元素样式

    我很好奇为什么是这个 div class overlay fdsfsd div overlay width 100px height 200px background color red alert document getElements
  • Objective-c 中是否有等效的 sqlite .dump ?

    我正在尝试开发一个 iOS 应用程序 该应用程序允许用户使用 GameKit 通过蓝牙同步他们的 sqlite 数据库 有没有办法使用许多 sqlite Objective C 库中的任何一个在 sqlite shell 上执行相当于 du
  • RVO 应何时启动?

    从下面的代码来看 如果发生了RVO 我希望看到2个地址指向同一位置 但事实并非如此 我的编译器是MS VC9 0 include
  • blob 在 ios 上不接受 Uint8Array

    我尝试创建一个 Blob 对象并将 Uint8Array 传递给它的构造函数 它在 Windows 上的 chrome 和 firefox 上运行良好 然而 在 ios 上的 chrome 和 safari 中 Blod 不包含 Uint8
  • 为什么Java默认只初始化类变量而不初始化局部变量?

    我正在学习 Java 中的链表 我有三个文件Main java List java and Node java 当我这样做时 我遇到了一个问题 为什么我应该初始化在方法中声明的局部变量 而不是在类中声明的类变量 In the first p
  • Visual Lisp:如何调用外部 C++ DLL 中的函数

    我有一个我编写的 C dll 本机的 不是 net 并且我想使用 Visual Lisp 中的功能 任何人都可以向我指出如何执行此操作的示例 或者至少要阅读哪些文档 我通过为我的 dll 编写一个 activex COM 包装器解决了这个问
  • 处理 AWS PHP SDK 2 中的错误

    如果我尝试从 S3 存储桶中获取不存在的对象 Amazon PHP SDK 2 会给我一个非常难看的错误 对我来说很方便 但对最终用户来说毫无意义 E g s3 aws gt get s3 result s3 gt getObject ar
  • JPA Glassfish 数据库更新问题

    我在 Glassfish v3 0 1 上部署了一个应用程序 它从数据库中的表中读取事件 一旦准备好 它会将它们标记为已处理 当尝试调用执行更新的方法时 我收到一个奇怪的错误 我无法解释 Override TransactionAttrib
  • AWS Glue 爬网程序创建分区和文件表

    我有一个非常基本的 s3 设置 我想使用 Athena 对其进行查询 数据全部存储在一个存储桶中 并组织到年 月 日 小时文件夹中 data 2018 01 01 01 file1 json file2 json 02 file3 json
  • 在 Bash 中递归更改文件扩展名

    我想递归地遍历一个目录并更改特定扩展名的所有文件的扩展名 例如 t1 to t2 执行此操作的 bash 命令是什么 Use find name t1 exec bash c mv 1 1 t1 t2 如果你有rename可用然后使用one
  • Python:pysqlite 库不支持 C 扩展加载

    我正在尝试让 Spatialite 与我的 django 应用程序一起使用 但是 我遇到了以下问题 raise ImproperlyConfigured The pysqlite library does not support C ext
  • 当服务器处于无限循环并且客户端停止时会发生什么?

    我试图弄清楚服务器和客户端之间的 交谈 是如何完成的 因此 当服务器生成无限循环时 echoing hello br 例如 当客户停止或点击 返回 时会发生什么 服务器如何知道循环已结束 或者它旁边是否有一个无限的进程 我可以在任何地方阅读
  • AngularJS 中的 ng-repeat 自动对焦

    我使用 ng repeat 获取多个电话号码 div div
  • 既然我们有了 ES6 Promise,还有理由使用 Q 或 BlueBird 这样的 Promise 库吗? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 在 Node js 添加了对 Promise 的原生支持之后 还有理由使用 Q 或 BlueBird 等库吗 例如 如果您正在启动一个新项目 并且假设在该项目中您没有任何使用这些库的依赖项
  • 通过 HTTP 使用 MSMQ。如何解决队列问题?

    我目前正在尝试将 MSMQ 与 C 和 NET 结合使用以实现 IPC 我试图理解它是如何工作的 但我对它很困惑访问 MSMQ 队列时路径名称和格式名称之间的差异 我在以下帖子中发现了一些类似的问题 通过 HTTP 的 MSMQ 调用未到达