Click here to Skip to main content
15,888,340 members
Please Sign up or sign in to vote.
5.00/5 (1 vote)
C#
Hello,
Below is the code I have written to display the contents of an MSMQ queue. It works fine in case of winforms. But When i create a web application, Though the queue has some data, Nothing is displayed.
Can u help me..?
Thanks in advance.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Messaging;
using System.Text;
using System.Windows.Forms;

namespace MSMQWebService
{
    /// <summary>
    /// Summary description for Service1
    /// </summary>

    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]

    public class Service1 : System.Web.Services.WebService
    {
        string QueueName = ".\\Private$\\q1";


        
        [WebMethod]
        public string DisplayMessage()
        {
            bool NoMessage = true;
           MessageQueue Q1 = new MessageQueue(QueueName);
            System.Messaging.Message[] AllMessages = Q1.GetAllMessages();
            foreach (System.Messaging.Message theMessage in AllMessages)
            {
                NoMessage = false;
                byte[] data = new byte[1024];
                theMessage.BodyStream.Read(data, 0, 1024);
                string strMessage = ASCIIEncoding.ASCII.GetString(data);
                Console.WriteLine(strMessage);    
           }
          
           if (NoMessage)
            {
                MessageBox.Show("Message Queue is Empty");

            }
           return "Success";
        }
       

    }
Posted
Comments
Member 10102675 26-Sep-13 6:58am    
Hmmm even that is not working. Actually I have modified my code as below :
[WebMethod]
public string DisplayMessage()
{
bool NoMessage = true;
MessageQueue Q1 = new MessageQueue(QueueName);
Q1.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
StringBuilder res = new StringBuilder();
System.Messaging.Message[] AllMessages = Q1.GetAllMessages();
foreach (System.Messaging.Message theMessage in AllMessages)
{
NoMessage = false;
res = res.Append(theMessage.Body.ToString());
return res.ToString();
turn strMessage.ToString();
}

if (NoMessage)
{
return "Empty Queue";
}
return "Success";
}


}
But the problem here is only one value is returned. that is only the last content of the queue is getting displayed.

Your want to use console.WriterLine() for writing in browser? it is wrong!
Use Response.Write()
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900