2016-10-06 3 views
0

этот мой первый вопрос так извините, если формат еще не совершенен.Aspx в разных средах

У меня есть небольшое приложение, общающееся через MSMQ, поэтому я решил сделать веб-страницу aspx для мониторинга содержимого этого msmq.

Я протестировал эту страницу на нашем сервере приема, работает отлично. Однако, когда я тестирую его на нашем prod-сервере, если msmq не пуст, у меня есть страница с сообщением «SERVER ERROR IN MSMQ MONITORING: Невозможно найти форматировщик, способный читать это сообщение».

Вот соответствующий раздел кода:

@{ 
    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

Эта очередь используется только одной программой, и в очереди нет ничего. Я провел несколько тестов, так как страница также может создавать минимальное сообщение и отправлять его в msmq, и сообщения отправляются правильно, но как только очередь не пуста, poof. – DoctorPrisme

+0

http://stackoverflow.com/questions/655276/message-queue-error-cannot-find-a-formatter-capable-of-reading-message? – brijber

ответ

0

Итак, я нашел источник моих проблем:

--as указан, f12/см варианты определения показали мне метаданные, но я не сделал найдите любой соответствующий класс/код. ==> Это привело меня к поиску информации о том, где вы помещаете код в веб-приложение asp.net. Ответ: в «папке кода приложения», которая затем скомпилирована для создания «dll-кода приложения». Угадай, что? Вы не можете просто скопировать этот файл и надеяться, что он будет работать, по-видимому.

Итак, я повторно взял исходный код, перекомпилировал и заменил файлы «сбой». Тадааа, я могу контролировать свой msmq.

(Также была опечатка для исправления, потому что страница не смогла создать правильный DTO для передачи и должна была очистить очередь несколько раз, так как она находится в prod, и я не могу просто отправить неверную информацию, но эй. учить).

По крайней мере, сейчас я зарегистрирован на SO.

Смежные вопросы