<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Apache.NMS.MSMQ</name>
    </assembly>
    <members>
        <member name="P:Apache.NMS.MSMQ.BaseMessage.NMSCorrelationID">
            <summary>
            The correlation ID used to correlate messages with conversations or long running business processes
            </summary>
        </member>
        <member name="P:Apache.NMS.MSMQ.BaseMessage.NMSDestination">
            <summary>
            The destination of the message
            </summary>
        </member>
        <member name="P:Apache.NMS.MSMQ.BaseMessage.NMSTimeToLive">
            <summary>
            The time in milliseconds that this message should expire in
            </summary>
        </member>
        <member name="P:Apache.NMS.MSMQ.BaseMessage.NMSMessageId">
            <summary>
            The message ID which is set by the provider
            </summary>
        </member>
        <member name="P:Apache.NMS.MSMQ.BaseMessage.NMSPersistent">
            <summary>
            Whether or not this message is persistent
            </summary>
        </member>
        <member name="P:Apache.NMS.MSMQ.BaseMessage.NMSPriority">
            <summary>
            The Priority on this message
            </summary>
        </member>
        <member name="P:Apache.NMS.MSMQ.BaseMessage.NMSRedelivered">
            <summary>
            Returns true if this message has been redelivered to this or another consumer before being acknowledged successfully.
            </summary>
        </member>
        <member name="P:Apache.NMS.MSMQ.BaseMessage.NMSReplyTo">
            <summary>
            The destination that the consumer of this message should send replies to
            </summary>
        </member>
        <member name="P:Apache.NMS.MSMQ.BaseMessage.NMSTimestamp">
            <summary>
            The timestamp the broker added to the message
            </summary>
        </member>
        <member name="P:Apache.NMS.MSMQ.BaseMessage.NMSType">
            <summary>
            The type name of this message
            </summary>
        </member>
        <member name="T:Apache.NMS.MSMQ.Connection">
            <summary>
            Represents a NMS connection MSMQ.  Since the underlying MSMQ APIs are actually
            connectionless, NMS connection in the MSMQ case are not expensive operations.
            </summary>
            
        </member>
        <member name="M:Apache.NMS.MSMQ.Connection.Start">
            <summary>
            Starts message delivery for this connection.
            </summary>
        </member>
        <member name="M:Apache.NMS.MSMQ.Connection.Stop">
            <summary>
            Stop message delivery for this connection.
            </summary>
        </member>
        <member name="M:Apache.NMS.MSMQ.Connection.CreateSession">
            <summary>
            Creates a new session to work on this connection
            </summary>
        </member>
        <member name="M:Apache.NMS.MSMQ.Connection.CreateSession(Apache.NMS.AcknowledgementMode)">
            <summary>
            Creates a new session to work on this connection
            </summary>
        </member>
        <member name="P:Apache.NMS.MSMQ.Connection.IsStarted">
            <summary>
            This property determines if the asynchronous message delivery of incoming
            messages has been started for this connection.
            </summary>
        </member>
        <member name="P:Apache.NMS.MSMQ.Connection.RequestTimeout">
            <summary>
            The default timeout for network requests.
            </summary>
        </member>
        <member name="T:Apache.NMS.MSMQ.ConnectionFactory">
            <summary>
            A Factory that can estbalish NMS connections to MSMQ
            </summary>
        </member>
        <member name="M:Apache.NMS.MSMQ.ConnectionFactory.CreateConnection">
            <summary>
            Creates a new connection to MSMQ.
            </summary>
        </member>
        <member name="M:Apache.NMS.MSMQ.ConnectionFactory.CreateConnection(System.String,System.String)">
            <summary>
            Creates a new connection to MSMQ.
            </summary>
        </member>
        <member name="M:Apache.NMS.MSMQ.ConnectionFactory.CreateConnection(System.String,System.String,System.Boolean)">
            <summary>
            Creates a new connection to MSMQ.
            </summary>
        </member>
        <member name="M:Apache.NMS.MSMQ.IMessageConverter.ToMsmqDestination(Apache.NMS.IDestination)">
            <summary>
            Method ToMSMQMessageQueue
            </summary>
            <param name="destination">An IDestination</param>
            <returns>A  MessageQueue</returns>
        </member>
        <member name="T:Apache.NMS.MSMQ.Destination">
            <summary>
            Summary description for Destination.
            </summary>
        </member>
        <member name="M:Apache.NMS.MSMQ.Destination.#ctor">
            The Default Constructor
        </member>
        <member name="M:Apache.NMS.MSMQ.Destination.#ctor(System.String)">
             Construct the Destination with a defined physical name;
            
             @param name
        </member>
        <member name="M:Apache.NMS.MSMQ.Destination.ToString">
            @return string representation of this instance
        </member>
        <member name="M:Apache.NMS.MSMQ.Destination.GetHashCode">
            @return hashCode for this instance
        </member>
        <member name="M:Apache.NMS.MSMQ.Destination.Equals(System.Object)">
             if the object passed in is equivalent, return true
            
             @param obj the object to compare
             @return true if this instance and obj are equivalent
        </member>
        <member name="M:Apache.NMS.MSMQ.Destination.CreateDestination(System.String)">
            Factory method to create a child destination if this destination is a composite
            @param name
            @return the created Destination
        </member>
        <member name="T:Apache.NMS.MSMQ.MessageConsumer">
            <summary>
            An object capable of receiving messages from some destination
            </summary>
        </member>
        <member name="T:Apache.NMS.MSMQ.MessageProducer">
            <summary>
            An object capable of sending messages to some destination
            </summary>
        </member>
        <member name="P:Apache.NMS.MSMQ.MessageProducer.RequestTimeout">
            <summary>
            The default timeout for network requests.
            </summary>
        </member>
        <member name="T:Apache.NMS.MSMQ.PrimitiveMap">
            <summary>
            A default implementation of IPrimitiveMap
            </summary>
        </member>
        <member name="M:Apache.NMS.MSMQ.PrimitiveMap.ToString">
            <summary>
            Method ToString
            </summary>
            <returns>A string</returns>
        </member>
        <member name="T:Apache.NMS.MSMQ.Queue">
            <summary>
            Summary description for Queue.
            </summary>
        </member>
        <member name="T:Apache.NMS.MSMQ.Session">
            <summary>
            MSQM provider of ISession
            </summary>
        </member>
        <member name="P:Apache.NMS.MSMQ.Session.RequestTimeout">
            <summary>
            The default timeout for network requests.
            </summary>
        </member>
    </members>
</doc>
