Microsoft KB Archive/246225

From BetaArchive Wiki
< Microsoft KB Archive
Revision as of 13:50, 21 July 2020 by X010 (talk | contribs) (Text replacement - """ to """)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Knowledge Base


Article ID: 246225

Article Last Modified on 2/22/2007



APPLIES TO

  • Microsoft Message Queuing 2.0
  • Microsoft Message Queue Server 1.0



This article was previously published under Q246225

SYMPTOMS

The IsWorldReadable property of a Microsoft Message Queuing MSMQQueueInfo object returns an Integer result rather than a Boolean. IsWorldReadable property returns a 1 if the queue is world readable and a 0 if it is not. This can cause logic errors in a Visual Basic (VB) program if the property is used in the expression portion of an If, While, or similar conditional statement.

When a numeric value is used in a condition statement in VB 0 is evaluated as false and all non-zero values are evaluated as true. The Not operator in VB inverts the bits of a value when used on a numeric value. The expression "Not 1" produces the result "-2" which is considered a "true" value in a VB condition statement.

Since VB evaluates both "1" and "Not 1" as true statements, if a queue is world readable both "queueinfo.IsWorldReadable" and "Not queueinfo.IsWorldReadable" evaluates true. In the following example code, if the queue is world readable both message boxes appear:

If queueinfo.IsWorldReadable Then
   MsgBox "The queue is world readable."
End If

If Not queueinfo.IsWorldReadable Then
   MsgBox "The queue is not world readable."
End If
                

RESOLUTION

There are two possible workarounds for the problem:

  1. Explicitly test the value of the IsWorldReadable property against 0 and 1. A value of 1 indicates that the queue is world readable, a value of 0 indicates that the queue is not world readable. An example of this test is shown in the following code:

    If MSMQQueueInfoObject.IsWorldReadable = 1 Then
       MsgBox "The queue is world readable."
    End If
    
    If MSMQQueueInfoObject.IsWorldReadable = 0 Then
       MsgBox "The queue is not world readable."
    End If
                            
  2. Avoid "negative" tests that use the Not operator with the IsWorldReadable property.


STATUS

It is safe to test explicitly for the 1 and 0 values. These values will not be changed in any future version of Message Queuing and will remain consistent. Future versions of the Message Queuing ActiveX components may add a property that may be evaluated as a true Boolean type for testing this characteristic.

MORE INFORMATION

The MSDN Online help describes the return values for the IsWorldReadable property as follows:

MSMQQueueInfo.IsWorldReadable

Return Values
   1 
      Everyone can read messages in the queue and its queue journal. 
   0 
      Default. Only the owner of the queue can read the messages in the queue. 
                

REFERENCES

MSDN Online help for the MSMQQueueInfo object type.
Visual Basic Programmers Guide

246218 MSMQMessage Object IsAuthenticated Property Returns an Integer



246222 MSMQQueueInfo Object IsTransactional Property Returns An Integer



245753 MSMQQueue Object IsOpen Property Returns an Integer



246458 MSMQMessage Object IsFirstInTransaction Property Returns An Integer



246460 MSMQMessage Object IsLastInTransaction Property Returns An Integer



Additional query words: MSMQ IsWorldReadable MSMQQueueInfo MSMQ

Keywords: kbbug kbprb KB246225