Created
October 9, 2008 19:33
-
-
Save jezell/15860 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class WcfManagementService : RuntimeService | |
{ | |
protected override void OnStart() | |
{ | |
base.OnStart(); | |
_host = new ServiceHost(new ServiceBusManagementService(Runtime)); | |
_host.Open(); | |
} | |
ServiceHost _host; | |
protected override void OnStop() | |
{ | |
base.OnStop(); | |
if(_host != null) _host.Close(); | |
_host = null; | |
} | |
} | |
static class ServiceBusManagementServiceTypeProvider | |
{ | |
public static IEnumerable<Type> GetKnownTypes(ICustomAttributeProvider provider) | |
{ | |
List<Type> knownTypes = new List<Type>(); | |
foreach (KnownTypeAttribute a in provider.GetCustomAttributes(typeof(KnownTypeAttribute), true).Cast<KnownTypeAttribute>()) | |
{ | |
if(a.Type != null) | |
{ | |
knownTypes.Add(a.Type); | |
} | |
} | |
knownTypes.AddRange(MessageDelivery.GetKnownTypes()); | |
return knownTypes.ToArray(); | |
} | |
} | |
[ServiceContract] | |
[ServiceKnownType("GetKnownTypes", typeof(ServiceBusManagementServiceTypeProvider))] | |
public interface IServiceBusManagementService | |
{ | |
[OperationContract(Action = WcfManagementServiceActions.Subscribe)] | |
void Subscribe([MessageParameter(Name = "SubscriptionEndpoint")] SubscriptionEndpoint subscription); | |
[OperationContract(Action = WcfManagementServiceActions.Unsubscribe)] | |
[FaultContract(typeof(SubscriptionNotFoundFault))] | |
void Unsubscribe([MessageParameter(Name = "SubscriptionID")] Guid subscriptionId); | |
[OperationContract(Action = WcfManagementServiceActions.Listen)] | |
void Listen([MessageParameter(Name = "ListenerEndpoint")] ListenerEndpoint endpoint); | |
[OperationContract(Action= WcfManagementServiceActions.StopListening)] | |
[FaultContract(typeof(ListenerNotFoundFault))] | |
void StopListening([MessageParameter(Name = "ListenerID")] Guid listenerId); | |
[OperationContract(Action = WcfManagementServiceActions.ListListeners, ReplyAction = WcfManagementServiceActions.ListListenersResponse)] | |
Collection<ListenerEndpoint> ListListeners(); | |
[OperationContract(Action = WcfManagementServiceActions.ListSubscribers, ReplyAction = WcfManagementServiceActions.ListSubscribersResponse)] | |
Collection<SubscriptionEndpoint> ListSubscribers(); | |
} | |
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)] | |
public class ServiceBusManagementService : IServiceBusManagementService | |
{ | |
public ServiceBusManagementService(ServiceBusRuntime runtime) | |
{ | |
Runtime = runtime; | |
} | |
#region IServiceBusManagementService Members | |
public ServiceBusRuntime Runtime { get; private set; } | |
[OperationBehavior] | |
public void Subscribe(SubscriptionEndpoint subscription) | |
{ | |
Runtime.Subscribe(subscription); | |
} | |
[OperationBehavior] | |
[FaultContract(typeof(SubscriptionNotFoundFault))] | |
public void Unsubscribe(Guid subscriptionId) | |
{ | |
try | |
{ | |
Runtime.Unsubscribe(subscriptionId); | |
} | |
catch (SubscriptionNotFoundException) | |
{ | |
throw new FaultException<SubscriptionNotFoundFault>(new SubscriptionNotFoundFault(subscriptionId)); | |
} | |
} | |
[OperationBehavior] | |
public void Listen([MessageParameter(Name = "Endpoint")] ListenerEndpoint endpoint) | |
{ | |
Runtime.AddListener(endpoint); | |
} | |
[OperationBehavior] | |
public void StopListening(Guid listenerId) | |
{ | |
try | |
{ | |
Runtime.RemoveListener(listenerId); | |
} | |
catch (ListenerNotFoundException) | |
{ | |
throw new FaultException<ListenerNotFoundFault>(new ListenerNotFoundFault(listenerId)); | |
} | |
} | |
[OperationBehavior] | |
public Collection<SubscriptionEndpoint> ListSubscribers() | |
{ | |
return Runtime.ListSubscribers(); | |
} | |
[OperationBehavior] | |
public Collection<ListenerEndpoint> ListListeners() | |
{ | |
return Runtime.ListListeners(); | |
} | |
#endregion | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment