2016-10-06 24 views
0

この最初の質問は申し訳ありませんが、フォーマットがまだ完全ではない場合。異なる環境のAspx

私はMSMQを介して通信する小さなアプリを持っていたので、そのmsmqの内容を監視するaspxウェブページを作ることにしました。

私は受付サーバーでそのページをテストしましたが、正常に動作します。 しかし、私が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> 
} 

コード1つのサーバーから他へコピーパスタがあり、かつ展開が同じ方法で正確に行われていました。誰でも私はこれを修正するために見ることができるか知っていますか?

私は解決策を探しましたが、:私はフォーマッターを持っているので、問題はないようです。 コードは別のサーバーで動作するので、コード自体とは関係なく環境に関係していると思います。 私は、ページが「注文待ち」と「キューライター」の定義を持っているところで「定義に行きましょう」とチェックしています。それは「メタデータから」ページに送られて、キューの作成者が直接のメタデータにない場合でも、そのページはmsmqにメッセージを送信でき、その内容を読み取ることはできないため、疑いの余地はありません。

+0

プロダクションサーバに、あなたが期待している構造ではないメッセージがあるように思えますが、これを確認する方法はありますか? –

+0

このキューは1つのプログラムでのみ使用され、キューには何もありません。 私はページが最小限のメッセージを作成してそれをmsmqに送信することができ、メッセージは正しく送信されますが、キューが空でないとすぐに、いくつかのテストを行った。 – DoctorPrisme

+0

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

答えて

0

(長い記事のために申し訳ありませんが)だから、私は私の問題の原因を見つけた:

--asは述べ、F12 /参照の定義オプションは私にメタデータを示したが、私はしませんでした任意の実際のクラス/コードを見つける。 ==>これは、asp.net Webアプリケーションのどこにコードを置くかに関する情報を検索することができました。答えは: "app code dll"を作るためにコンパイルされた "app code folder"です。何だと思う?あなたはそのファイルを貼り付けてコピーするだけで、うまくいくとは思えません。

私はソースコードを再作成し、再コンパイルし、 "失敗した"ファイルを置き換えました。 Tadaaa、私は私のmsmqを監視することができます。

(正しいDTOを作成できなかったため、誤った情報が送信されてしまいました。学ぶ)。

少なくとも今私はSOに登録されています。

関連する問題