diff --git a/src/distributor/MsmqWorkerAvailabilityManager/Installer.cs b/src/distributor/MsmqWorkerAvailabilityManager/Installer.cs new file mode 100644 index 00000000000..c8cbef86793 --- /dev/null +++ b/src/distributor/MsmqWorkerAvailabilityManager/Installer.cs @@ -0,0 +1,16 @@ +using System.Security.Principal; +using NServiceBus.Installation; +using NServiceBus.Utils; + +namespace MsmqWorkerAvailabilityManager +{ + class Installer : INeedToInstallSomething + { + public void Install(WindowsIdentity identity) + { + var m = NServiceBus.Configure.Instance.Builder.Build(); + + MsmqUtilities.CreateQueueIfNecessary(m.StorageQueue, identity.Name); + } + } +} diff --git a/src/distributor/MsmqWorkerAvailabilityManager/MsmqWorkerAvailabilityManager.cs b/src/distributor/MsmqWorkerAvailabilityManager/MsmqWorkerAvailabilityManager.cs index 7cd2a2b33ec..eb60817bcee 100644 --- a/src/distributor/MsmqWorkerAvailabilityManager/MsmqWorkerAvailabilityManager.cs +++ b/src/distributor/MsmqWorkerAvailabilityManager/MsmqWorkerAvailabilityManager.cs @@ -20,24 +20,8 @@ public class MsmqWorkerAvailabilityManager : IWorkerAvailabilityManager /// The queue provided must be transactional. public string StorageQueue { - get { return s; } - set - { - s = value; - - MsmqUtilities.CreateQueueIfNecessary(value); - - var path = MsmqUtilities.GetFullPath(value); - - var q = new MessageQueue(path); - - if (!q.Transactional) - throw new Exception("Queue must be transactional."); - - storageQueue = q; - } + get; set; } - private string s; /// /// Removes all entries from the worker availability queue @@ -90,11 +74,9 @@ public void Start() { var path = MsmqUtilities.GetFullPath(StorageQueue); - MsmqUtilities.CreateQueueIfNecessary(StorageQueue); - - var q = new MessageQueue(path); + storageQueue = new MessageQueue(path); - if (!q.Transactional) + if (!storageQueue.Transactional) throw new Exception("Queue must be transactional."); } diff --git a/src/distributor/MsmqWorkerAvailabilityManager/MsmqWorkerAvailabilityManager.csproj b/src/distributor/MsmqWorkerAvailabilityManager/MsmqWorkerAvailabilityManager.csproj index ff89ac6cd93..e4c4a63b44a 100644 --- a/src/distributor/MsmqWorkerAvailabilityManager/MsmqWorkerAvailabilityManager.csproj +++ b/src/distributor/MsmqWorkerAvailabilityManager/MsmqWorkerAvailabilityManager.csproj @@ -14,7 +14,6 @@ - v4.0 publish\ @@ -73,6 +72,7 @@ CommonAssemblyInfo.cs + diff --git a/src/impl/faults/NServiceBus.Faults.Forwarder.Config/ConfigureFaultsForwarder.cs b/src/impl/faults/NServiceBus.Faults.Forwarder.Config/ConfigureFaultsForwarder.cs index d366fed6a5d..56af29e01b2 100644 --- a/src/impl/faults/NServiceBus.Faults.Forwarder.Config/ConfigureFaultsForwarder.cs +++ b/src/impl/faults/NServiceBus.Faults.Forwarder.Config/ConfigureFaultsForwarder.cs @@ -21,8 +21,6 @@ public static class ConfigureFaultsForwarder /// public static Configure MessageForwardingInCaseOfFault(this Configure config) { - string errorQueue; - var section = Configure.GetConfigSection(); if (section == null) { @@ -33,23 +31,25 @@ public static Configure MessageForwardingInCaseOfFault(this Configure config) throw new ConfigurationErrorsException("Could not find backup configuration section 'MsmqTransportConfig' in order to locate the error queue."); - errorQueue = msmq.ErrorQueue; + ErrorQueue = msmq.ErrorQueue; } else - errorQueue = section.ErrorQueue; + ErrorQueue = section.ErrorQueue; - if(string.IsNullOrEmpty(errorQueue)) + if(string.IsNullOrEmpty(ErrorQueue)) throw new ConfigurationErrorsException("Faults forwarding requires a error queue to be specified. Please add a 'MessageForwardingInCaseOfFaultConfig' section to your app.config"); - //TODO: this should probably be moved to a new IManageFaults.Start|Init method instead. Check with Udi - MsmqUtilities.CreateQueueIfNecessary(errorQueue); - config.Configurer.ConfigureComponent(DependencyLifecycle.InstancePerCall) - .ConfigureProperty(fm => fm.ErrorQueue, errorQueue); + .ConfigureProperty(fm => fm.ErrorQueue, ErrorQueue); return config; } + /// + /// The queue to which to forward errors. + /// + public static string ErrorQueue { get; set; } + private static ILog Logger = LogManager.GetLogger("MessageForwardingInCaseOfFault"); } diff --git a/src/impl/faults/NServiceBus.Faults.Forwarder.Config/Installer.cs b/src/impl/faults/NServiceBus.Faults.Forwarder.Config/Installer.cs new file mode 100644 index 00000000000..06675e70f64 --- /dev/null +++ b/src/impl/faults/NServiceBus.Faults.Forwarder.Config/Installer.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Principal; +using System.Text; +using NServiceBus.Installation; +using NServiceBus.Utils; + +namespace NServiceBus.Faults.Forwarder.Config +{ + class Installer : INeedToInstallSomething + { + public void Install(WindowsIdentity identity) + { + MsmqUtilities.CreateQueueIfNecessary(ConfigureFaultsForwarder.ErrorQueue, identity.Name); + } + } +} diff --git a/src/impl/faults/NServiceBus.Faults.Forwarder.Config/NServiceBus.Faults.Forwarder.Config.csproj b/src/impl/faults/NServiceBus.Faults.Forwarder.Config/NServiceBus.Faults.Forwarder.Config.csproj index 77db24bbace..f2e3746c84a 100644 --- a/src/impl/faults/NServiceBus.Faults.Forwarder.Config/NServiceBus.Faults.Forwarder.Config.csproj +++ b/src/impl/faults/NServiceBus.Faults.Forwarder.Config/NServiceBus.Faults.Forwarder.Config.csproj @@ -65,6 +65,14 @@ ..\..\..\..\build\nservicebus.core\NServiceBus.Faults.dll False + + ..\..\..\..\build\nservicebus.core\NServiceBus.Installation.dll + False + + + ..\..\..\..\build\nservicebus.core\NServiceBus.Installation.Windows.dll + False + False ..\..\..\..\build\nservicebus.core\NServiceBus.ObjectBuilder.dll @@ -97,6 +105,7 @@ CommonAssemblyInfo.cs + diff --git a/src/impl/unicast/NServiceBus.Unicast.Subscriptions.Msmq/MsmqSubscriptionStorage.cs b/src/impl/unicast/NServiceBus.Unicast.Subscriptions.Msmq/MsmqSubscriptionStorage.cs index c4530ba42fb..83e904b9877 100644 --- a/src/impl/unicast/NServiceBus.Unicast.Subscriptions.Msmq/MsmqSubscriptionStorage.cs +++ b/src/impl/unicast/NServiceBus.Unicast.Subscriptions.Msmq/MsmqSubscriptionStorage.cs @@ -35,6 +35,30 @@ public class MsmqSubscriptionStorage : ISubscriptionStorage { void ISubscriptionStorage.Init() { + string path = MsmqUtilities.GetFullPath(Queue); + + q = new MessageQueue(path); + + bool transactional; + try + { + transactional = q.Transactional; + } + catch (Exception ex) + { + throw new ArgumentException(string.Format("There is a problem with the subscription storage queue {0}. See enclosed exception for details.", Queue), ex); + } + + if (!transactional) + throw new ArgumentException("Queue must be transactional (" + Queue + ")."); + + var mpf = new MessagePropertyFilter(); + mpf.SetAll(); + + q.Formatter = new XmlMessageFormatter(new[] { typeof(string) }); + + q.MessageReadPropertyFilter = mpf; + foreach (var m in q.GetAllMessages()) { var subscriber = m.Label; @@ -168,38 +192,8 @@ private MessageQueueTransactionType GetTransactionType() /// public string Queue { - get { return queue; } - set - { - queue = value; - MsmqUtilities.CreateQueueIfNecessary(value); - - string path = MsmqUtilities.GetFullPath(value); - - q = new MessageQueue(path); - - bool transactional; - try - { - transactional = q.Transactional; - } - catch(Exception ex) - { - throw new ArgumentException(string.Format("There is a problem with the subscription storage queue {0}. See enclosed exception for details.", value), ex); - } - - if (!transactional) - throw new ArgumentException("Queue must be transactional (" + value + ")."); - - var mpf = new MessagePropertyFilter(); - mpf.SetAll(); - - q.Formatter = new XmlMessageFormatter(new[] { typeof(string) }); - - q.MessageReadPropertyFilter = mpf; - } + get; set; } - private string queue; #endregion diff --git a/src/impl/unicast/NServiceBus.Unicast.Subscriptions.Msmq/NServiceBus.Unicast.Subscriptions.Msmq.Config/ConfigureMsmqSubscriptionStorage.cs b/src/impl/unicast/NServiceBus.Unicast.Subscriptions.Msmq/NServiceBus.Unicast.Subscriptions.Msmq.Config/ConfigureMsmqSubscriptionStorage.cs index f39538242b9..1247001a505 100644 --- a/src/impl/unicast/NServiceBus.Unicast.Subscriptions.Msmq/NServiceBus.Unicast.Subscriptions.Msmq.Config/ConfigureMsmqSubscriptionStorage.cs +++ b/src/impl/unicast/NServiceBus.Unicast.Subscriptions.Msmq/NServiceBus.Unicast.Subscriptions.Msmq.Config/ConfigureMsmqSubscriptionStorage.cs @@ -1,8 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NServiceBus.Unicast.Subscriptions.Msmq.Config; +using Common.Logging; +using NServiceBus.Config; +using NServiceBus.ObjectBuilder; +using NServiceBus.Unicast.Subscriptions.Msmq; namespace NServiceBus { @@ -19,12 +18,26 @@ public static class ConfigureMsmqSubscriptionStorage /// /// /// - public static ConfigMsmqSubscriptionStorage MsmqSubscriptionStorage(this Configure config) + public static Configure MsmqSubscriptionStorage(this Configure config) { - ConfigMsmqSubscriptionStorage cfg = new ConfigMsmqSubscriptionStorage(); - cfg.Configure(config); + var cfg = Configure.GetConfigSection(); - return cfg; + if (cfg == null) + Logger.Warn("Could not find configuration section for Msmq Subscription Storage."); + + Queue = (cfg != null ? cfg.Queue : "NServiceBus_Subscriptions"); + + var storageConfig = config.Configurer.ConfigureComponent(DependencyLifecycle.SingleInstance); + storageConfig.ConfigureProperty(s => s.Queue, Queue); + + return config; } + + /// + /// Queue used to store subscriptions. + /// + public static string Queue { get; set; } + + private static readonly ILog Logger = LogManager.GetLogger(typeof(MsmqSubscriptionStorage)); } } diff --git a/src/impl/unicast/NServiceBus.Unicast.Subscriptions.Msmq/NServiceBus.Unicast.Subscriptions.Msmq.Config/Installer.cs b/src/impl/unicast/NServiceBus.Unicast.Subscriptions.Msmq/NServiceBus.Unicast.Subscriptions.Msmq.Config/Installer.cs new file mode 100644 index 00000000000..5fdced148e7 --- /dev/null +++ b/src/impl/unicast/NServiceBus.Unicast.Subscriptions.Msmq/NServiceBus.Unicast.Subscriptions.Msmq.Config/Installer.cs @@ -0,0 +1,21 @@ +using System.Security.Principal; +using NServiceBus.Installation; +using NServiceBus.Utils; + +namespace NServiceBus.Unicast.Subscriptions.Msmq.Config +{ + /// + /// Class responssible for installing the MSMQ subscription storage. + /// + public class Installer : INeedToInstallSomething + { + /// + /// Installs the queue. + /// + /// + public void Install(WindowsIdentity identity) + { + MsmqUtilities.CreateQueueIfNecessary(ConfigureMsmqSubscriptionStorage.Queue, identity.Name); + } + } +} diff --git a/src/impl/unicast/NServiceBus.Unicast.Subscriptions.Msmq/NServiceBus.Unicast.Subscriptions.Msmq.Config/NServiceBus.Unicast.Subscriptions.Msmq.Config.csproj b/src/impl/unicast/NServiceBus.Unicast.Subscriptions.Msmq/NServiceBus.Unicast.Subscriptions.Msmq.Config/NServiceBus.Unicast.Subscriptions.Msmq.Config.csproj index 8b1179158fc..f11a69e9dfb 100644 --- a/src/impl/unicast/NServiceBus.Unicast.Subscriptions.Msmq/NServiceBus.Unicast.Subscriptions.Msmq.Config/NServiceBus.Unicast.Subscriptions.Msmq.Config.csproj +++ b/src/impl/unicast/NServiceBus.Unicast.Subscriptions.Msmq/NServiceBus.Unicast.Subscriptions.Msmq.Config/NServiceBus.Unicast.Subscriptions.Msmq.Config.csproj @@ -63,6 +63,14 @@ ..\..\..\..\..\build\nservicebus.core\NServiceBus.Config.dll False + + ..\..\..\..\..\build\nservicebus.core\NServiceBus.Installation.dll + False + + + ..\..\..\..\..\build\nservicebus.core\NServiceBus.Installation.Windows.dll + False + ..\..\..\..\..\build\nservicebus.core\NServiceBus.ObjectBuilder.dll False @@ -71,6 +79,10 @@ ..\..\..\..\..\build\nservicebus.core\NServiceBus.Unicast.Subscriptions.dll False + + ..\..\..\..\..\build\nservicebus.core\NServiceBus.Utils.dll + False + @@ -83,7 +95,7 @@ CommonAssemblyInfo.cs - + diff --git a/src/impl/unicast/queuing/NServiceBus.Unicast.Queuing.Msmq.Config/ConfigureMsmqMessageQueue.cs b/src/impl/unicast/queuing/NServiceBus.Unicast.Queuing.Msmq.Config/ConfigureMsmqMessageQueue.cs index 1b8ed8f6166..b15cc121f2a 100644 --- a/src/impl/unicast/queuing/NServiceBus.Unicast.Queuing.Msmq.Config/ConfigureMsmqMessageQueue.cs +++ b/src/impl/unicast/queuing/NServiceBus.Unicast.Queuing.Msmq.Config/ConfigureMsmqMessageQueue.cs @@ -6,6 +6,11 @@ namespace NServiceBus { public static class ConfigureMsmqMessageQueue { + /// + /// Indicates that MsmqMessageQueue has been selected. + /// + public static bool Selected { get; set; } + /// /// Use MSMQ for your queuing infrastructure. /// @@ -13,6 +18,8 @@ public static class ConfigureMsmqMessageQueue /// public static Configure MsmqTransport(this Configure config) { + Selected = true; + config.Configurer.ConfigureComponent(DependencyLifecycle.SingleInstance); config.Configurer.ConfigureComponent(DependencyLifecycle.SingleInstance); diff --git a/src/impl/unicast/queuing/NServiceBus.Unicast.Queuing.Msmq.Config/Installer.cs b/src/impl/unicast/queuing/NServiceBus.Unicast.Queuing.Msmq.Config/Installer.cs new file mode 100644 index 00000000000..707a28a25ce --- /dev/null +++ b/src/impl/unicast/queuing/NServiceBus.Unicast.Queuing.Msmq.Config/Installer.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Principal; +using System.Text; +using NServiceBus.Installation; +using NServiceBus.Utils; + +namespace NServiceBus.Unicast.Queuing.Msmq.Config +{ + class Installer : INeedToInstallSomething + { + public void Install(WindowsIdentity identity) + { + if (!ConfigureMsmqMessageQueue.Selected) + return; + + var bus = NServiceBus.Configure.Instance.Builder.Build(); + + MsmqUtilities.CreateQueueIfNecessary(bus.Address, identity.Name); + } + } +} diff --git a/src/impl/unicast/queuing/NServiceBus.Unicast.Queuing.Msmq.Config/NServiceBus.Unicast.Queuing.Msmq.Config.csproj b/src/impl/unicast/queuing/NServiceBus.Unicast.Queuing.Msmq.Config/NServiceBus.Unicast.Queuing.Msmq.Config.csproj index d82b629d9df..ec26e9c0404 100644 --- a/src/impl/unicast/queuing/NServiceBus.Unicast.Queuing.Msmq.Config/NServiceBus.Unicast.Queuing.Msmq.Config.csproj +++ b/src/impl/unicast/queuing/NServiceBus.Unicast.Queuing.Msmq.Config/NServiceBus.Unicast.Queuing.Msmq.Config.csproj @@ -41,16 +41,32 @@ False ..\..\..\..\..\build\nservicebus.core\NServiceBus.Config.dll + + ..\..\..\..\..\build\nservicebus.core\NServiceBus.Installation.dll + False + + + ..\..\..\..\..\build\nservicebus.core\NServiceBus.Installation.Windows.dll + False + False ..\..\..\..\..\build\nservicebus.core\NServiceBus.ObjectBuilder.dll False + + ..\..\..\..\..\build\nservicebus.core\NServiceBus.Unicast.dll + False + False ..\..\..\..\..\build\nservicebus.core\NServiceBus.Unicast.Queuing.dll False + + ..\..\..\..\..\build\nservicebus.core\NServiceBus.Utils.dll + False + @@ -62,6 +78,7 @@ CommonAssemblyInfo.cs + diff --git a/src/impl/unicast/queuing/NServiceBus.Unicast.Queuing.Msmq/MsmqMessageReceiver.cs b/src/impl/unicast/queuing/NServiceBus.Unicast.Queuing.Msmq/MsmqMessageReceiver.cs index e2bd68e6b44..7cf6c08f983 100644 --- a/src/impl/unicast/queuing/NServiceBus.Unicast.Queuing.Msmq/MsmqMessageReceiver.cs +++ b/src/impl/unicast/queuing/NServiceBus.Unicast.Queuing.Msmq/MsmqMessageReceiver.cs @@ -26,8 +26,6 @@ public void Init(string address, bool transactional) if (machine.ToLower() != Environment.MachineName.ToLower()) throw new InvalidOperationException("Input queue must be on the same machine as this process."); - MsmqUtilities.CreateQueueIfNecessary(address); - myQueue = new MessageQueue(MsmqUtilities.GetFullPath(address)); if (useTransactions && !QueueIsTransactional()) diff --git a/src/impl/unicast/queuing/queuing.suo b/src/impl/unicast/queuing/queuing.suo index d3b573ee481..1339b3d04b4 100644 Binary files a/src/impl/unicast/queuing/queuing.suo and b/src/impl/unicast/queuing/queuing.suo differ diff --git a/src/proxy/NServiceBus.Proxy/IProxyDataStorage.cs b/src/proxy/NServiceBus.Proxy/IProxyDataStorage.cs index 4e99bfa7652..b0d48441e02 100644 --- a/src/proxy/NServiceBus.Proxy/IProxyDataStorage.cs +++ b/src/proxy/NServiceBus.Proxy/IProxyDataStorage.cs @@ -2,6 +2,7 @@ namespace NServiceBus.Proxy { public interface IProxyDataStorage { + void Init(); void Save(ProxyData data); ProxyData GetAndRemove(string id); } diff --git a/src/proxy/NServiceBus.Proxy/Installer.cs b/src/proxy/NServiceBus.Proxy/Installer.cs new file mode 100644 index 00000000000..68836e607d9 --- /dev/null +++ b/src/proxy/NServiceBus.Proxy/Installer.cs @@ -0,0 +1,14 @@ +using System.Security.Principal; +using NServiceBus.Installation; + +namespace NServiceBus.Proxy +{ + class Installer : INeedToInstallSomething + { + public void Install(WindowsIdentity identity) + { + var s = Configure.Instance.Builder.Build(); + Utils.MsmqUtilities.CreateQueueIfNecessary(s.StorageQueue, identity.Name); + } + } +} diff --git a/src/proxy/NServiceBus.Proxy/MsmqProxyDataStorage.cs b/src/proxy/NServiceBus.Proxy/MsmqProxyDataStorage.cs index 3f0eecb6c89..4a64836356e 100644 --- a/src/proxy/NServiceBus.Proxy/MsmqProxyDataStorage.cs +++ b/src/proxy/NServiceBus.Proxy/MsmqProxyDataStorage.cs @@ -10,28 +10,23 @@ class MsmqProxyDataStorage : IProxyDataStorage public string StorageQueue { - get{ return s; } - set - { - s = value; - - MsmqUtilities.CreateQueueIfNecessary(value); - - string path = MsmqUtilities.GetFullPath(value); + get; set; + } - var q = new MessageQueue(path); + public void Init() + { + string path = MsmqUtilities.GetFullPath(StorageQueue); - if (!q.Transactional) - throw new Exception("Queue must be transactional."); + var q = new MessageQueue(path); - q.Formatter = new XmlMessageFormatter {TargetTypes = new[] {typeof (ProxyData)}}; - q.MessageReadPropertyFilter = new MessagePropertyFilter { Body = true, CorrelationId = true }; + if (!q.Transactional) + throw new Exception("Queue must be transactional."); - storageQueue = q; + q.Formatter = new XmlMessageFormatter { TargetTypes = new[] { typeof(ProxyData) } }; + q.MessageReadPropertyFilter = new MessagePropertyFilter { Body = true, CorrelationId = true }; - } + storageQueue = q; } - private string s; public void Save(ProxyData data) { diff --git a/src/proxy/NServiceBus.Proxy/NServiceBus.Proxy.csproj b/src/proxy/NServiceBus.Proxy/NServiceBus.Proxy.csproj index 2e128a9f947..29f7d92d5f7 100644 --- a/src/proxy/NServiceBus.Proxy/NServiceBus.Proxy.csproj +++ b/src/proxy/NServiceBus.Proxy/NServiceBus.Proxy.csproj @@ -1,4 +1,5 @@ - + + Debug AnyCPU @@ -13,7 +14,6 @@ - http://localhost/NServiceBus.Proxy/ true Web @@ -79,6 +79,7 @@ CommonAssemblyInfo.cs + diff --git a/src/proxy/NServiceBus.Proxy/Proxy.cs b/src/proxy/NServiceBus.Proxy/Proxy.cs index f6d3290a395..175ed3ba027 100644 --- a/src/proxy/NServiceBus.Proxy/Proxy.cs +++ b/src/proxy/NServiceBus.Proxy/Proxy.cs @@ -70,6 +70,7 @@ public string RemoteServer public void Start() { + Storage.Init(); internalTransport.Start(InternalAddress); externalTransport.Start(ExternalAddress); } diff --git a/src/utils/MsmqUtilities.cs b/src/utils/MsmqUtilities.cs index f9504c989b2..d40b52e9a7c 100644 --- a/src/utils/MsmqUtilities.cs +++ b/src/utils/MsmqUtilities.cs @@ -20,7 +20,8 @@ public class MsmqUtilities /// Utility method for creating a queue if it does not exist. /// /// - public static void CreateQueueIfNecessary(string queueName) + ///The account to be given permissions to the queue + public static void CreateQueueIfNecessary(string queueName, string account) { if (string.IsNullOrEmpty(queueName)) return; @@ -39,12 +40,16 @@ public static void CreateQueueIfNecessary(string queueName) try { if (MessageQueue.Exists(q)) + { + Logger.Debug("Queue exists, going to set permissions."); + SetPermissionsForQueue(q, account); return; + } Logger.Warn("Queue " + q + " does not exist."); Logger.Debug("Going to create queue: " + q); - CreateQueue(q); + CreateQueue(q, account); } catch (Exception ex) { @@ -56,17 +61,34 @@ public static void CreateQueueIfNecessary(string queueName) /// Create named message queue /// /// - public static void CreateQueue(string queueName) + ///The account to be given permissions to the queue + public static void CreateQueue(string queueName, string account) { var createdQueue = MessageQueue.Create(queueName, true); - createdQueue.SetPermissions(LocalAdministratorsGroupName, MessageQueueAccessRights.FullControl, AccessControlEntryType.Allow); - createdQueue.SetPermissions(LocalEveryoneGroupName, MessageQueueAccessRights.WriteMessage, AccessControlEntryType.Allow); - createdQueue.SetPermissions(LocalAnonymousLogonName, MessageQueueAccessRights.WriteMessage, AccessControlEntryType.Allow); - + SetPermissionsForQueue(queueName, account); + Logger.Debug("Queue created: " + queueName); } + /// + /// Sets default permissions for queue. + /// + /// + /// + public static void SetPermissionsForQueue(string queue, string account) + { + var q = new MessageQueue(queue); + + q.SetPermissions(LocalAdministratorsGroupName, MessageQueueAccessRights.FullControl, AccessControlEntryType.Allow); + q.SetPermissions(LocalEveryoneGroupName, MessageQueueAccessRights.WriteMessage, AccessControlEntryType.Allow); + q.SetPermissions(LocalAnonymousLogonName, MessageQueueAccessRights.WriteMessage, AccessControlEntryType.Allow); + + q.SetPermissions(account, MessageQueueAccessRights.WriteMessage, AccessControlEntryType.Allow); + q.SetPermissions(account, MessageQueueAccessRights.ReceiveMessage, AccessControlEntryType.Allow); + q.SetPermissions(account, MessageQueueAccessRights.PeekMessage, AccessControlEntryType.Allow); + } + /// /// Turns a '@' separated value into a full path. /// Format is 'queue@machine', or 'queue@ipaddress'