private static ServiceHost CreateServiceBusHost(string serviceNamespace, string servicePath, string issuerName, string issuerSecret, Binding binding, Type serviceType) { Guard.ArgumentNotNullOrEmptyString(serviceNamespace, "serviceNamespace"); Guard.ArgumentNotNullOrEmptyString(servicePath, "servicePath"); Guard.ArgumentNotNullOrEmptyString(issuerName, "issuerName"); Guard.ArgumentNotNullOrEmptyString(issuerSecret, "issuerSecret"); Guard.ArgumentNotNull(binding, "binding"); var callToken = TraceManager.DebugComponent.TraceIn(serviceNamespace, servicePath, binding.Name); var address = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, servicePath); var credentialsBehaviour = new TransportClientEndpointBehavior() { TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret) }; var endpoint = new ServiceEndpoint(ContractDescription.GetContract(GetServiceContract(serviceType)), binding, new EndpointAddress(address)); endpoint.Behaviors.Add(credentialsBehaviour); // Apply default endpoint configuration. ServiceEndpointConfiguration.ConfigureDefaults(endpoint); ServiceBehaviorAttribute serviceBehaviorAttr = FrameworkUtility.GetDeclarativeAttribute <ServiceBehaviorAttribute>(serviceType); ServiceHost host = null; if (serviceBehaviorAttr != null && serviceBehaviorAttr.InstanceContextMode == InstanceContextMode.Single) { host = new ServiceHost(Activator.CreateInstance(serviceType)); } else { host = new ServiceHost(serviceType); } host.Description.Endpoints.Add(endpoint); #if DEBUG var debugBehavior = new ServiceDebugBehavior(); debugBehavior.IncludeExceptionDetailInFaults = true; host.Description.Behaviors.Remove <ServiceDebugBehavior>(); host.Description.Behaviors.Add(debugBehavior); #endif TraceManager.DebugComponent.TraceOut(callToken, endpoint.Address.Uri); return(host); }
public static Type GetServiceContract(Type serviceType) { Guard.ArgumentNotNull(serviceType, "serviceType"); Type[] serviceInterfaces = serviceType.GetInterfaces(); if (serviceInterfaces != null && serviceInterfaces.Length > 0) { foreach (Type serviceInterface in serviceInterfaces) { ServiceContractAttribute serviceContractAttr = FrameworkUtility.GetDeclarativeAttribute <ServiceContractAttribute>(serviceInterface); if (serviceContractAttr != null) { return(serviceInterface); } } } return(null); }