这是我的第一个问题,如果格式不完美,那就很抱歉。
我有一个小应用程序通过MSMQ进行通信,因此我决定创建一个aspx网页来监视该msmq的内容。
我在验收服务器上测试过该页面,效果非常好。 但是,当我在我们的prod服务器上测试它时,如果msmq不为空,我有一个错误页面说“MSMQ监视中的服务器错误:找不到能够读取此消息的格式化程序”。
以下是代码的相关部分:
@{
var errorMessage = "";
string queueName = ".\\Private$\\cotfollowupqueue";
System.Messaging.MessageQueue myqueue = new System.Messaging.MessageQueue(@queueName);
System.Messaging.Message[] msgs = new System.Messaging.Message[0];
try {
msgs= myqueue.GetAllMessages();
}
catch (Exception ex)
{
errorMessage = "An error occured : " + ex.Message.ToString();
}
myqueue.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(AwaitingOrder_DTO) });
}
@section featured {
<section class="featured">
<div class="content-wrapper">
<hgroup class="title">
<h1>@Page.Title .</h1>< br/>
<h2>Content of the MSMQ</h2>
</hgroup>
<p>This table will show you the content of the MicroSoft Message Queuing used for COT Follow Up.</p>
<p>
<!-- ADD THINGS HERE -->
@errorMessage
<table border="1">
<tr>
<td>COT ID</td>
<td>Row ID</td>
<td>Number of attempts</td>
<td>Next attempt at</td>
<td>Cot Message</td>
<td>Status</td>
<td>Success</td>
</tr>
@foreach (var msg in msgs)
{
myqueue.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(AwaitingOrder_DTO) });
var message = (AwaitingOrder_DTO)msg.Body;
<tr>
<td>@message.COTID</td>
<td>@message.rowId</td>
<td>@message.numberOfRetries</td>
<td>@message.nextAttempt</td>
<td>@message.cotMessage</td>
<td>@message.status</td>
<td>@message.success</td>
</tr>
}
</table>
</p>
</div>
</section>
}
代码是从一个服务器到另一个服务器的复制意大利面,部署完全以相同的方式完成。有谁知道我可以看到什么来纠正这个?
我已经搜索了解决方案,但是:我有一个格式化程序,所以它似乎不是问题所在。 代码在另一台服务器上工作,所以我猜它可能与代码本身无关,而与环境无关。 我已经检查了“转到定义”,其中页面得到了“等待命令dto”和“队列编写器”定义,并且它将我发送到“来自元数据”页面,这让我想知道这可能是麻烦,但是我非常怀疑,因为即使队列编写器不在直接元数据中,该页面也能够向msmq发送消息,而不是读取它的内容。
有什么想法吗?
(很抱歉很长)
答案 0 :(得分:0)
所以,我发现了问题的根源:
- 如上所述,f12 / see定义选项显示了元数据,但我没有找到任何真实的类/代码对应。 ==&GT;这导致我搜索有关您将代码放在asp.net web应用程序中的位置的信息。答案是:在&#34;应用程序代码文件夹&#34;,然后将其编译为制作&#34;应用程序代码dll&#34;。你猜怎么着?你不能只是复制粘贴该文件,并希望它能够正常工作。
所以我重新获取源代码,重新编译,并替换了&#34;失败&#34;文件。 Tadaaa,我可以监控我的msmq。
(还有一个拼写错误,因为页面无法为传输创建正确的DTO,并且必须多次清理队列,因为它在prod中我不能简单地发送错误的信息但是嘿。这就是你学习的方法。)
至少现在我在SO上注册了。