.net – Trouble sending messages via MSMQ from a windowsmobile device


I am attempting to send a message using MSMQ from a mobile device to a remote private queue on a server.

Whats happening?
I do not experience any errors when the mobile code sends the message. If I look at the msmq folder on the mobile device it has indeed created a .oq (outbound queue) file for the remote that it is sending to.

I am using the Direct=TCP with an IP address in the formatname for the queue. I have verified that identical code runs without issue from my desktop. The message is delivered correctly.

I do not believe the code to be the issue. Perhaps I am missing something that must be done in the mobile environment to allow the message to leave the queue and be delivered to the server.

Things I have verified or done to troubleshoot:

  1. I have verified that everything reported from visadm using verify is acceptable.
  2. Binary is enabled for MSMQ.
  3. The log reports that MSMQ has started without error.
  4. All SDK certs are installed on the device.
  5. A .oq file is created when an outbound message is sent.
  6. Journal and deadletter are enabled on the message. (Nothing is reported by the server as undeliverable- I do not believe it is ever connecting)
  7. The network is active and valid (I can visit web pages hosted on the server via the browser)
  8. The servers MSMQ is valid (I can use identical code from the desktop and deliver messages)
  9. Via visadm the status reports correctly on the mobile device for MSMQ.

I am hoping someone may be familiar with MSMQ on windows mobile who may be able to give me some advice as to what I may not have checked or enabled.

I am using .Net CF 3.5 on the device and coding in C# though as I stated the code doesnt appear to be the issue.

Thanks in advance for any help

Best Solution

It seems the issue was that the server uses a Transactional Message Queue. Once I added ;XACTONLY to the end of my message queue string and altered the Send method to use System.Messaging.MessageQueueTransactionType.Single it worked. You would think that it would throw an error or something to let you know this was needed.

Related Question