public MoveReceiveResult TryReceiveByLookupId(long lookupId, NativeMsmqMessage message, MsmqTransactionMode transactionMode, int action) { MsmqQueueHandle handle = GetHandle(); int error = 0; while (true) { try { error = ReceiveByLookupIdCore(handle, lookupId, message, transactionMode, action); } catch (ObjectDisposedException ex) { // ---- with Close MsmqDiagnostics.ExpectedException(ex); return(MoveReceiveResult.Succeeded); } if (0 == error) { return(MoveReceiveResult.Succeeded); } if (IsReceiveErrorDueToInsufficientBuffer(error)) { message.GrowBuffers(); continue; } else if (UnsafeNativeMethods.MQ_ERROR_MESSAGE_NOT_FOUND == error) { return(MoveReceiveResult.MessageNotFound); } else if (UnsafeNativeMethods.MQ_ERROR_MESSAGE_LOCKED_UNDER_TRANSACTION == error) { return(MoveReceiveResult.MessageLockedUnderTransaction); } else if (IsErrorDueToStaleHandle(error)) { HandleIsStale(handle); } throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MsmqException(SR.GetString(SR.MsmqReceiveError, MsmqError.GetErrorString(error)), error)); } }
public override ReceiveResult TryReceive(NativeMsmqMessage message, TimeSpan timeout, MsmqTransactionMode transactionMode) { // ignore the transactionMode TimeoutHelper timeoutHelper = new TimeoutHelper(timeout); MsmqQueueHandle handle = GetHandle(); while (true) { int error = PeekLockCore(handle, (MsmqInputMessage)message, timeoutHelper.RemainingTime()); if (error == 0) { return(ReceiveResult.MessageReceived); } if (IsReceiveErrorDueToInsufficientBuffer(error)) { message.GrowBuffers(); continue; } else if (error == UnsafeNativeMethods.MQ_ERROR_IO_TIMEOUT) { return(ReceiveResult.Timeout); } else if (error == UnsafeNativeMethods.MQ_ERROR_OPERATION_CANCELLED) { return(ReceiveResult.OperationCancelled); } else if (error == UnsafeNativeMethods.MQ_ERROR_INVALID_HANDLE) { // should happen only if racing with Close return(ReceiveResult.OperationCancelled); } else if (IsErrorDueToStaleHandle(error)) { HandleIsStale(handle); } throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MsmqException(SR.GetString(SR.MsmqReceiveError, MsmqError.GetErrorString(error)), error)); } }
public override ReceiveResult TryReceive(NativeMsmqMessage message, TimeSpan timeout, MsmqTransactionMode transactionMode) { // ignore the transactionMode TimeoutHelper timeoutHelper = new TimeoutHelper(timeout); MsmqQueueHandle handle = GetHandle(); while (true) { int error = PeekLockCore(handle, (MsmqInputMessage)message, timeoutHelper.RemainingTime()); if (error == 0) { return ReceiveResult.MessageReceived; } if (IsReceiveErrorDueToInsufficientBuffer(error)) { message.GrowBuffers(); continue; } else if (error == UnsafeNativeMethods.MQ_ERROR_IO_TIMEOUT) { return ReceiveResult.Timeout; } else if (error == UnsafeNativeMethods.MQ_ERROR_OPERATION_CANCELLED) { return ReceiveResult.OperationCancelled; } else if (error == UnsafeNativeMethods.MQ_ERROR_INVALID_HANDLE) { // should happen only if racing with Close return ReceiveResult.OperationCancelled; } else if (IsErrorDueToStaleHandle(error)) { HandleIsStale(handle); } throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MsmqException(SR.GetString(SR.MsmqReceiveError, MsmqError.GetErrorString(error)), error)); } }
public MoveReceiveResult TryReceiveByLookupId(long lookupId, NativeMsmqMessage message, MsmqTransactionMode transactionMode, int action) { MsmqQueueHandle handle = this.GetHandle(); int error = 0; while (true) { try { error = this.ReceiveByLookupIdCore(handle, lookupId, message, transactionMode, action); } catch (ObjectDisposedException exception) { MsmqDiagnostics.ExpectedException(exception); return(MoveReceiveResult.Succeeded); } if (error == 0) { return(MoveReceiveResult.Succeeded); } if (!IsReceiveErrorDueToInsufficientBuffer(error)) { if (-1072824184 == error) { return(MoveReceiveResult.MessageNotFound); } if (-1072824164 == error) { return(MoveReceiveResult.MessageLockedUnderTransaction); } if (IsErrorDueToStaleHandle(error)) { this.HandleIsStale(handle); } throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MsmqException(System.ServiceModel.SR.GetString("MsmqReceiveError", new object[] { MsmqError.GetErrorString(error) }), error)); } message.GrowBuffers(); } }
public MoveReceiveResult TryReceiveByLookupId(long lookupId, NativeMsmqMessage message, MsmqTransactionMode transactionMode, int action) { MsmqQueueHandle handle = GetHandle(); int error = 0; while (true) { try { error = ReceiveByLookupIdCore(handle, lookupId, message, transactionMode, action); } catch (ObjectDisposedException ex) { // ---- with Close MsmqDiagnostics.ExpectedException(ex); return MoveReceiveResult.Succeeded; } if (0 == error) { return MoveReceiveResult.Succeeded; } if (IsReceiveErrorDueToInsufficientBuffer(error)) { message.GrowBuffers(); continue; } else if (UnsafeNativeMethods.MQ_ERROR_MESSAGE_NOT_FOUND == error) { return MoveReceiveResult.MessageNotFound; } else if (UnsafeNativeMethods.MQ_ERROR_MESSAGE_LOCKED_UNDER_TRANSACTION == error) { return MoveReceiveResult.MessageLockedUnderTransaction; } else if (IsErrorDueToStaleHandle(error)) { HandleIsStale(handle); } throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MsmqException(SR.GetString(SR.MsmqReceiveError, MsmqError.GetErrorString(error)), error)); } }
public override MsmqQueue.ReceiveResult TryReceive(NativeMsmqMessage message, TimeSpan timeout, MsmqTransactionMode transactionMode) { TimeoutHelper helper = new TimeoutHelper(timeout); MsmqQueueHandle handle = base.GetHandle(); while (true) { int error = this.PeekLockCore(handle, (MsmqInputMessage) message, helper.RemainingTime()); if (error == 0) { return MsmqQueue.ReceiveResult.MessageReceived; } if (!MsmqQueue.IsReceiveErrorDueToInsufficientBuffer(error)) { if (error == -1072824293) { return MsmqQueue.ReceiveResult.Timeout; } if (error == -1072824312) { return MsmqQueue.ReceiveResult.OperationCancelled; } if (error == -1072824313) { return MsmqQueue.ReceiveResult.OperationCancelled; } if (MsmqQueue.IsErrorDueToStaleHandle(error)) { base.HandleIsStale(handle); } throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MsmqException(System.ServiceModel.SR.GetString("MsmqReceiveError", new object[] { MsmqError.GetErrorString(error) }), error)); } message.GrowBuffers(); } }