上下文 - 带有私有队列的 Server 2008 R2,IIS 设置。通过 HTTP 从其他计算机发送消息。[MSMQ 不在“默认网站”中。我将我的网站的 ID 更改为 1 以安装 msmq(之前已卸载它)]
我需要一些帮助。我读完了所有“通过 http 发送的 msmq 消息无法传递”的内容,并对此进行了大量研究,但就是无法让它正常工作。
如果我使用 IP 地址,我可以让队列接收消息,但如果我使用解析为相同 IP 地址的 FQDN,则无法接收消息。我需要域名才能工作,因为我的下一步是让 SSL 工作,显然我的证书是完整的域名!
我有一个非常简单的应用程序,可以发送以下消息:
Private Function SendStuff() As String
Dim output As String = "Mesages Sent To" & Environment.NewLine
Dim Addresses As New List(Of String)
Addresses.Add("Direct=HTTP://46.0.0.206/msmq/Private$/test.q")
Addresses.Add("Direct=HTTPS://46.0.0.206/msmq/Private$/test.q")
Addresses.Add("Direct=HTTP://subdomain.domain.net/msmq/Private$/test.q")
Addresses.Add("Direct=HTTPS://subdomain.domain.net/msmq/Private$/test.q")
For Each address In Addresses
Dim fullAddress As String = "FormatName:" & address
Dim mq As New System.Messaging.MessageQueue(fullAddress)
Dim mm As New System.Messaging.Message()
Dim body As String = "Hello via constructor " & fullAddress
With mm
.Body = body
.AcknowledgeType = Messaging.AcknowledgeTypes.None
.UseAuthentication = False
.TimeToReachQueue = New TimeSpan(0, 20, 0)
.Label = address.Substring(7, 14)
End With
mq.Send(mm)
output = output & Environment.NewLine & fullAddress
Next
Return output
End Function
在服务器上,在 IIS 日志中,我们得到了这样的信息:
2014-03-07 09:04:02 46.0.0.206 POST /msmq/private$/test.q - 80 - 83.0.0.130 - 200 0 0 31
2014-03-07 09:04:02 46.0.0.206 POST /msmq/private$/test.q - 443 - 83.0.0.130 - 200 0 0 46
2014-03-07 09:04:02 46.0.0.206 POST /msmq/private$/test.q - 80 - 83.0.0.130 - 200 0 0 78
我在 test.q 中收到 1 条消息,我期望收到 2 条(均来自 HTTP 协议,我还没有期望收到 httpS,但如果能收到就好了:)
收到的消息:
<?xml version="1.0"?>
<string>Hello via constructor FormatName:Direct=HTTP://46.0.0.206/msmq/Private$/test.q</string>
有人能告诉我下一步该看什么吗,在服务器/接收计算机事件日志中没有任何有趣的东西,尽管我打开了‘端到端’,但在记录“应用程序和服务日志\Microsoft\Windows\MSMQ'中我没有得到任何内容,里面有 0 条消息。
任何帮助都值得感激。
谢谢
答案1
好的,解决方案很简单。
似乎很明显,所有文档都是在 HTTP 选项之前制作的,因此只缺少一个示例。
您需要为 MSMQ 添加重定向,从 FQDN.com 到 localhost。
您可以通过在以下位置添加 XML 文件来执行此操作:C:\Windows\System32\msmq\Mapping
内容如下:
<redirections xmlns="msmq-queue-redirections.xml">
<redirection>
<from>http://FQDN.com/msmq/private$/test.q</from>
<to>http://localhost/msmq/private$/test.q</to>
</redirection>
</redirections>
完毕