public ServiceHost CreateServiceHost(ClusterConfiguration clusterConfiguration)
        {
            var managerNode = new ManagerNode(clusterConfiguration);
            managerNode.Start();
            var serviceHost = new ServiceHost(managerNode,
                                              new[]
                                                  {
                                                      new Uri(string.Format("http://localhost:{0}/brightstarcluster",
                                                                            Configuration.HttpPort)),
                                                      new Uri(string.Format("net.tcp://localhost:{0}/brightstarcluster",
                                                                            Configuration.TcpPort)),
                                                      new Uri(string.Format("net.pipe://localhost/{0}",
                                                                            Configuration.NamedPipeName))
                                                  });

            var basicHttpBinding = new BasicHttpContextBinding { TransferMode = TransferMode.StreamedResponse, MaxReceivedMessageSize = int.MaxValue, SendTimeout = TimeSpan.FromMinutes(30), ReaderQuotas = XmlDictionaryReaderQuotas.Max, Namespace = "http://www.networkedplanet.com/schemas/brightstar" };
            var netTcpContextBinding = new NetTcpContextBinding { TransferMode = TransferMode.StreamedResponse, MaxReceivedMessageSize = int.MaxValue, SendTimeout = TimeSpan.FromMinutes(30), ReaderQuotas = XmlDictionaryReaderQuotas.Max, Namespace = "http://www.networkedplanet.com/schemas/brightstar" };
            var netNamedPipeBinding = new NetNamedPipeBinding { TransferMode = TransferMode.StreamedResponse, MaxReceivedMessageSize = int.MaxValue, SendTimeout = TimeSpan.FromMinutes(30), ReaderQuotas = XmlDictionaryReaderQuotas.Max, Namespace = "http://www.networkedplanet.com/schemas/brightstar" };

            serviceHost.AddServiceEndpoint(typeof(IBrightstarClusterManagerService), basicHttpBinding, "");
            serviceHost.AddServiceEndpoint(typeof(IBrightstarClusterManagerService), netTcpContextBinding, "");
            serviceHost.AddServiceEndpoint(typeof(IBrightstarClusterManagerService), netNamedPipeBinding, "");

            var throttlingBehavior = new ServiceThrottlingBehavior { MaxConcurrentCalls = int.MaxValue };

            serviceHost.Description.Behaviors.Add(new ServiceMetadataBehavior { HttpGetEnabled = true });
            serviceHost.Description.Behaviors.Add(throttlingBehavior);

            serviceHost.Closed += StopNode;
            return serviceHost;
            
        }
 /// <summary>
 /// Initialises and returns a new HTTP service client. This client should be used when the client is on a separate machine from the service and
 /// firewall or other constrains prohibit the use of the TcpNet client.
 /// </summary>
 /// <param name="endpointUri">The uri where the HTTP endpoint is running. By default this is http://{machinename}:8090/brightstar</param>
 /// <param name="queryCache">OPTIONAL : the cache to use for query results</param>
 /// <returns>A new brightstar service client. It is important to call dispose on the client after use.</returns>
 internal static IBrightstarService GetHttpClient(Uri endpointUri, ICache queryCache = null)
 {
     var binding = new BasicHttpContextBinding
     {
         MaxReceivedMessageSize = Int32.MaxValue,
         SendTimeout = TimeSpan.FromMinutes(30),
         TransferMode = TransferMode.StreamedResponse,
         ReaderQuotas = XmlDictionaryReaderQuotas.Max
     };
     var endpointAddress = new EndpointAddress(endpointUri);
     var client = new BrightstarServiceClient(new BrightstarWcfServiceClient(binding, endpointAddress), queryCache);
     return client;
 }
 public static Binding Resolve(WcfBindingTypes type)
 {
     Binding binding = null;
     switch (type)
     {
         case WcfBindingTypes.BasicHttpBinding:
             binding = new BasicHttpBinding();
             break;
         case WcfBindingTypes.NetTcpBinding:
             binding = new NetTcpBinding();
             break;
         case WcfBindingTypes.NetTcpContextBinding:
             binding = new NetTcpContextBinding();
             break;
         case WcfBindingTypes.WsHttpBinding:
             binding = new WSHttpBinding();
             break;
         case WcfBindingTypes.NetMsmqBinding:
             binding = new NetMsmqBinding();
             break;
         case WcfBindingTypes.NetPeerTcpBinding:
             binding = new NetPeerTcpBinding();
             break;
         case WcfBindingTypes.BasicHttpContextBinding:
             binding = new BasicHttpContextBinding();
             break;
         case WcfBindingTypes.WSHttpContextBinding:
             binding = new WSHttpContextBinding();
             break;
         case WcfBindingTypes.WS2007FederationHttpBinding:
             binding = new WS2007FederationHttpBinding();
             break;
         case WcfBindingTypes.WS2007HttpBinding:
             binding = new WS2007HttpBinding();
             break;
         case WcfBindingTypes.NetNamedPipeBinding:
             binding = new NetNamedPipeBinding();
             break;
         case WcfBindingTypes.WSFederationHttpBinding:
             binding = new WSFederationHttpBinding();
             break;
         case WcfBindingTypes.WSDualHttpBinding:
             binding = new WSDualHttpBinding();
             break;
         default:
             binding = new CustomBinding();
             break;
     }
     return binding;
 }
 public void TestUnavailableWithNoNodes()
 {
     StartClusterManagerService();
     var endpointUri = "http://127.0.0.1:9090/brightstarcluster";
     var binding = new BasicHttpContextBinding
     {
         MaxReceivedMessageSize = Int32.MaxValue,
         SendTimeout = TimeSpan.FromMinutes(30),
         TransferMode = TransferMode.StreamedResponse,
         ReaderQuotas = XmlDictionaryReaderQuotas.Max
     };
     var endpointAddress = new EndpointAddress(endpointUri);
     
     var client = new BrightstarClusertManagerServiceClient (binding, endpointAddress);
     var clusterDescription = client.GetClusterDescription();
     Assert.IsNotNull(clusterDescription);
     Assert.AreEqual(ClusterStatus.Unavailable, clusterDescription.Status);
 }
 private void AddClient(RoleInstance workerInstance)
 {
     var binding = new BasicHttpContextBinding
                       {
                           TransferMode = TransferMode.StreamedResponse,
                           MaxReceivedMessageSize = Int32.MaxValue,
                           SendTimeout = TimeSpan.FromMinutes(10),
                           ReaderQuotas = XmlDictionaryReaderQuotas.Max,
                           HostNameComparisonMode = HostNameComparisonMode.Exact
                       };
     var endpointUri = String.Format("http://{0}", workerInstance.InstanceEndpoints["StoreWorkerService"].IPEndpoint);
     var endpointAddress = new EndpointAddress(endpointUri);
     var client = new StoreWorkerServiceClient(binding, endpointAddress);
     lock (_clients)
     {
         _clients.RemoveAll(t => t.Item1.Equals(workerInstance.Id));
         _clients.Add(new Tuple<string, IStoreWorkerService>(workerInstance.Id, client));
     }
 }
        private static BrightstarClusertManagerServiceClient GetClusterClient()
        {
            const string endpointUri = "http://127.0.0.1:9090/brightstarcluster";
            var binding = new BasicHttpContextBinding
                              {
                                  MaxReceivedMessageSize = Int32.MaxValue,
                                  SendTimeout = TimeSpan.FromMinutes(30),
                                  TransferMode = TransferMode.StreamedResponse,
                                  ReaderQuotas = XmlDictionaryReaderQuotas.Max
                              };
            var endpointAddress = new EndpointAddress(endpointUri);

            var client = new BrightstarClusertManagerServiceClient(binding, endpointAddress);
            return client;
        }
Beispiel #7
0
		/// <summary>
		/// Get a binding based on values of this class
		/// </summary>
		/// <returns>Hydrated binding</returns>
		/// <exception cref="InvalidOperationException">Thrown if requested binding doesn't match one of the implemented bindings</exception>
		public Binding GetBinding()
		{
			System.ServiceModel.Channels.Binding binder = null;
			switch (this.Binding)
			{
				case WcfBindings.BasicHttp:
					if (!string.IsNullOrWhiteSpace(ConfigurationName))
					{
						binder = new BasicHttpBinding(ConfigurationName);
					}
					else
					{
						binder = new BasicHttpBinding()
						{
							BypassProxyOnLocal = ByPassProxyOnLocal,
							MaxBufferPoolSize = MaxBufferSize,
							MaxReceivedMessageSize = MaxReceivedMessageSize,
							//UseDefaultWebProxy = UseDefaultProxy,							
							ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas()
							{
								MaxArrayLength = MaxArrayLength,
								MaxBytesPerRead = MaxBytesPerRead,
								MaxDepth = MaxDepth,
								MaxNameTableCharCount = MaxNameTableCharCount,
								MaxStringContentLength = MaxStringContentLength
							}
						};
						
					}
					break;
				case WcfBindings.BasicContext:
					if (!string.IsNullOrWhiteSpace(ConfigurationName))
					{
						binder = new BasicHttpContextBinding(ConfigurationName);
					}
					else
					{
						binder = new BasicHttpContextBinding()
						{
							BypassProxyOnLocal = ByPassProxyOnLocal,
							MaxBufferPoolSize = MaxBufferSize,
							MaxReceivedMessageSize = MaxReceivedMessageSize,
							UseDefaultWebProxy = UseDefaultProxy,
							ProxyAddress = new Uri(ProxyAddress),
							ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas()
							{
								MaxArrayLength = MaxArrayLength,
								MaxBytesPerRead = MaxBytesPerRead,
								MaxDepth = MaxDepth,
								MaxNameTableCharCount = MaxNameTableCharCount,
								MaxStringContentLength = MaxStringContentLength
							}
						};
					}
					break;
				case WcfBindings.NetTcp:
					if (!string.IsNullOrWhiteSpace(ConfigurationName))
					{
						binder = new NetTcpBinding(ConfigurationName);
					}
					else
					{
						binder = new NetTcpBinding()
							{
								MaxBufferPoolSize = MaxBufferSize,
								MaxReceivedMessageSize = MaxReceivedMessageSize,
								ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas()
								{
									MaxArrayLength = MaxArrayLength,
									MaxBytesPerRead = MaxBytesPerRead,
									MaxDepth = MaxDepth,
									MaxNameTableCharCount = MaxNameTableCharCount,
									MaxStringContentLength = MaxStringContentLength
								}
							};
					}
					break;
				case WcfBindings.WebHttp:
					if (!string.IsNullOrWhiteSpace(ConfigurationName))
					{
						binder = new WebHttpBinding(ConfigurationName);
					}
					else
					{
						binder = new WebHttpBinding()
						{
							BypassProxyOnLocal = ByPassProxyOnLocal,
							MaxBufferPoolSize = MaxBufferSize,
							MaxReceivedMessageSize = MaxReceivedMessageSize,
							UseDefaultWebProxy = UseDefaultProxy,
							ProxyAddress = new Uri(ProxyAddress),
							ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas()
							{
								MaxArrayLength = MaxArrayLength,
								MaxBytesPerRead = MaxBytesPerRead,
								MaxDepth = MaxDepth,
								MaxNameTableCharCount = MaxNameTableCharCount,
								MaxStringContentLength = MaxStringContentLength
							}
						};
					}
					break;
				case WcfBindings.WsHttpBinding:
					if (!string.IsNullOrWhiteSpace(ConfigurationName))
					{
						binder = new WSHttpBinding(ConfigurationName);
					}
					else
					{
						binder = new WSHttpBinding()
							{
								BypassProxyOnLocal = ByPassProxyOnLocal,
								MaxBufferPoolSize = MaxBufferSize,
								MaxReceivedMessageSize = MaxReceivedMessageSize,
								UseDefaultWebProxy = UseDefaultProxy,
								ProxyAddress = new Uri(ProxyAddress),
								ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas()
								{
									MaxArrayLength = MaxArrayLength,
									MaxBytesPerRead = MaxBytesPerRead,
									MaxDepth = MaxDepth,
									MaxNameTableCharCount = MaxNameTableCharCount,
									MaxStringContentLength = MaxStringContentLength
								}
							};
					}
					break;
				case WcfBindings.WsHttpContext:
					if (!string.IsNullOrWhiteSpace(ConfigurationName))
					{
						binder = new WSHttpContextBinding(ConfigurationName);
					}
					else
					{
						binder = new WSHttpContextBinding()
						{
							BypassProxyOnLocal = ByPassProxyOnLocal,
							MaxBufferPoolSize = MaxBufferSize,
							MaxReceivedMessageSize = MaxReceivedMessageSize,
							UseDefaultWebProxy = UseDefaultProxy,
							ProxyAddress = new Uri(ProxyAddress),
							ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas()
							{
								MaxArrayLength = MaxArrayLength,
								MaxBytesPerRead = MaxBytesPerRead,
								MaxDepth = MaxDepth,
								MaxNameTableCharCount = MaxNameTableCharCount,
								MaxStringContentLength = MaxStringContentLength
							}
						};
					}
					break;
				default:
					throw ExceptionFactory.New<InvalidOperationException>("Unable to instantiante a binding of '{0}'", this.Binding.ToString());
			}

			binder.CloseTimeout = CloseTimeout;
			binder.OpenTimeout = OpenTimeout;
			binder.ReceiveTimeout = ReceiveTimeout;
			binder.SendTimeout = SendTimeout;
			return binder;
		}