[ 
https://issues.apache.org/activemq/browse/AMQNET-64?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_40174
 ] 

Jim Gomes commented on AMQNET-64:
---------------------------------

David,
Thanks for adding this issue.  Overall, I think these changes improve this area 
of the code.  However, a couple of comments on the second set of changes.  

The first is that you added a semi-colon to the end of the if-statement on line 
130.  This introduced a bug in the code.  You'll want to remove that from your 
changes.

The second is with the constructor for the TimeSpan object in the Dequeue() 
function.  I see what you are attempting to do as stated in the 
AutoResetEvent.WaitOne() method documentation.  If the TimeSpan object 
represents -1 milliseconds, it will wait indefinitely.  However, the TimeSpan 
object that is being created is not -1 milliseconds.  It looks to be a TimeSpan 
of  -1 100-nanoseconds (or ticks), which may not be the same. This may cause a 
problem.  I would suggest changing to the following code:

{code}
public IMessage Dequeue()
{
    // Create a TimeSpan of -1 milliseconds, which will wait indefinitely.
    return Dequeue(TimeSpan.FromMilliseconds(-1));
}
{code}


> occasional exception in ActiveMQ.Dispatcher.Dequeue() : millisecondsTimeout 
> must be either non-negative and less than or equal to Int32.MaxValue or -1.
> -------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: AMQNET-64
>                 URL: https://issues.apache.org/activemq/browse/AMQNET-64
>             Project: ActiveMQ .Net
>          Issue Type: Bug
>          Components: ActiveMQ Client
>         Environment: .NET 2.0, Windows 2000 Server under VMware, 
> https://svn.apache.org/repos/asf/activemq/activemq-dotnet/trunk @ 578465
>            Reporter: David Holroyd
>            Assignee: James Strachan
>
> I tried a lightly modified version of the example code from 
> http://activemq.apache.org/nms/nms.html and find that every few invocations 
> of the test program, I see the following exception, rather than the normal 
> 'Received message' output:
> {noformat}
> Unhandled Exception: System.ArgumentOutOfRangeException: Number must be 
> either non-negative and less than or equal to Int32.MaxValue or -1.
> Parameter name: millisecondsTimeout
>    at System.Threading.WaitHandle.WaitOne(Int32 millisecondsTimeout, Boolean 
> exitContext)
>    at ActiveMQ.Dispatcher.Dequeue(TimeSpan timeout)
>    at ActiveMQ.Dispatcher.Dequeue()
>    at ActiveMQ.MessageConsumer.Receive()
>    at Test.Bridge.Main(String[] args)
> {noformat}
> The code in question is,
> {code:title=Bridge.cs}
> namespace Test {
>       using System;
>       using NMS;
>       using ActiveMQ;
>       public class Bridge {
>               public static void Main(string[] args) {
>                       IConnectionFactory factory = new ConnectionFactory(new 
> Uri("tcp://192.168.9.162:61616"));
>                       using (IConnection connection = 
> factory.CreateConnection())
>                       {
>                           Console.WriteLine("Created a connection!");
>                           
>                           ISession session = connection.CreateSession();
>                           
>                           IDestination destination = 
> session.GetQueue("FOO.BAR");
>                           Console.WriteLine("Using destination: " + 
> destination);
>                           
>                           // lets create a consumer and producer
>                           IMessageConsumer consumer = 
> session.CreateConsumer(destination);
>                           
>                           IMessageProducer producer = 
> session.CreateProducer(destination);
>                           producer.Persistent = true;
>                           
>                           // lets send a message
>                           ITextMessage request = 
> session.CreateTextMessage("Hello World!");
>                           request.NMSCorrelationID = "abc";
>                           request.Properties["NMSXGroupID"] = "cheese";
>                           request.Properties["myHeader"] = "James";
>                           
>                           producer.Send(request);
>                           
>                           // lets consume a message
>                           ITextMessage message = (ITextMessage) 
> consumer.Receive();
>                           if (message == null)
>                           {
>                               Console.WriteLine("No message received!");
>                           }
>                           else
>                           {
>                               Console.WriteLine("Received message with ID:   
> " + message.NMSMessageId);
>                               Console.WriteLine("Received message with text: 
> " + message.Text);
>                           }
>                       }
>               }
>       }
> }
> {code}
> The C# code is talking to ActiveMQ 4.1.1 running on the Linux host (I'm using 
> NMS within VMware).
> I'll try to nose around the code and work out what's happening, but this is 
> the first time I've ever worked with C#.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to