I am having a client app drop the message into a private queue named MsmqService/MsmqService.svc.
In IIS Under default web site,I added the wcf service with the net.msmq binding.
I made sure the queue was set to transactional
The following is the relevant config portion on both the client app and wcf.
<system.serviceModel>
<bindings>
<netMsmqBinding>
<binding name="MsmqBindingNonTransactionalNoSecurity" exactlyOnce="false">
<security mode="None"/>
</binding>
<binding name="MsmqBindingNonTransactionalTransportSecurity" exactlyOnce="false">
<security mode="Transport"/>
</binding>
<binding name="MsmqBindingTransactionalTransportSecurity" exactlyOnce="true" receiveErrorHandling="Move">
<security mode="Transport"/>
</binding>
</netMsmqBinding>
</bindings>
<services>
<service name="MsmqService.MsmqService">
<endpoint address="net.msmq://localhost/private/MsmqService/MsmqService.svc" binding="netMsmqBinding"
bindingConfiguration="MsmqBindingTransactionalTransportSecurity" contract="MsmqContract.IMsmqContract"/>
</service>
</services>
</system.serviceModel>
I had the net.msmq under enabled protocols for the default web site and under enabled protocols for the wcf service
This is probably because you are using IIS to host the service. IIS unloads the worker process during periods of inactivity which means there will be no process available to consume a message when one arrives.
To host in IIS is compliated at best. Better to host in a windows service, much simpler.