Aspx在不同的环境中

时间:2016-10-06 08:41:26

标签: c# asp.net

这是我的第一个问题,如果格式不完美,那就很抱歉。

我有一个小应用程序通过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发送消息,而不是读取它的内容。

有什么想法吗?

(很抱歉很长)

1 个答案:

答案 0 :(得分:0)

所以,我发现了问题的根源:

- 如上所述,f12 / see定义选项显示了元数据,但我没有找到任何真实的类/代码对应。 ==&GT;这导致我搜索有关您将代码放在asp.net web应用程序中的位置的信息。答案是:在&#34;应用程序代码文件夹&#34;,然后将其编译为制作&#34;应用程序代码dll&#34;。你猜怎么着?你不能只是复制粘贴该文件,并希望它能够正常工作。

所以我重新获取源代码,重新编译,并替换了&#34;失败&#34;文件。 Tadaaa,我可以监控我的msmq。

(还有一个拼写错误,因为页面无法为传输创建正确的DTO,并且必须多次清理队列,因为它在prod中我不能简单地发送错误的信息但是嘿。这就是你学习的方法。)

至少现在我在SO上注册了。