You are viewing a plain text version of this content. The canonical link for it is here.
Posted to stonehenge-commits@incubator.apache.org by dr...@apache.org on 2009/04/28 05:40:08 UTC
svn commit: r769249 - in
/incubator/stonehenge/trunk/stocktrader/dotnet/business_service:
BusinessServiceConfigurationSettings/Settings.cs
BusinessServiceConsole/Program.cs
Author: drewbai
Date: Tue Apr 28 05:40:07 2009
New Revision: 769249
URL: http://svn.apache.org/viewvc?rev=769249&view=rev
Log:
STONEHENGE-39
Allow restart on .NET WCF Service Hosts
Applied patch for Ben
Thanks!
Modified:
incubator/stonehenge/trunk/stocktrader/dotnet/business_service/BusinessServiceConfigurationSettings/Settings.cs
incubator/stonehenge/trunk/stocktrader/dotnet/business_service/BusinessServiceConsole/Program.cs
Modified: incubator/stonehenge/trunk/stocktrader/dotnet/business_service/BusinessServiceConfigurationSettings/Settings.cs
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/business_service/BusinessServiceConfigurationSettings/Settings.cs?rev=769249&r1=769248&r2=769249&view=diff
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/dotnet/business_service/BusinessServiceConfigurationSettings/Settings.cs (original)
+++ incubator/stonehenge/trunk/stocktrader/dotnet/business_service/BusinessServiceConfigurationSettings/Settings.cs Tue Apr 28 05:40:07 2009
@@ -39,6 +39,7 @@
using System;
using System.Collections.Generic;
+using System.Collections.Specialized;
using System.Configuration;
using System.Web;
using System.ServiceModel;
@@ -111,6 +112,11 @@
public Settings()
{
+ if (Settings.ORDER_PROCESSING_MODE != null)
+ {
+ ConfigurationManager.RefreshSection("appSettings");
+ }
+
Settings.ORDER_PROCESSING_MODE = ConfigurationManager.AppSettings.Get("ORDER_PROCESSING_MODE");
Settings.EVENT_LOG = ConfigurationManager.AppSettings.Get("EVENT_LOG");
Settings.DBServer = ConfigurationManager.AppSettings.Get("DBServer");
Modified: incubator/stonehenge/trunk/stocktrader/dotnet/business_service/BusinessServiceConsole/Program.cs
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/dotnet/business_service/BusinessServiceConsole/Program.cs?rev=769249&r1=769248&r2=769249&view=diff
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/dotnet/business_service/BusinessServiceConsole/Program.cs (original)
+++ incubator/stonehenge/trunk/stocktrader/dotnet/business_service/BusinessServiceConsole/Program.cs Tue Apr 28 05:40:07 2009
@@ -57,19 +57,21 @@
namespace Trade.BusinessServiceConsole
{
-
+
class BusinessService_ConsoleHost
{
/// <summary>
/// The program entry class. Note how this simply inherits from the provided base class.
/// </summary>
- class MyHost
+ public class BusinessServiceConsoleHost : IDisposable
{
+ private ServiceHost serviceHost;
+
/// <summary>
/// This is the key call where you will define parameters for the Master host startup, and call
/// the base 'startService' method.
/// </summary>
- public void startUp()
+ public void start()
{
string shortHostName = System.Net.Dns.GetHostName();
IPHostEntry myEntry = System.Net.Dns.GetHostEntry(shortHostName);
@@ -78,52 +80,97 @@
//List<ServiceHostInfo> startupList = new List<ServiceHostInfo>(new ServiceHostInfo[] { new ServiceHostInfo(Settings.SELFHOST_VHOST_NAME, false, null, new object[] { new Trade.BusinessServiceImplementation.ErrorBehaviorAttribute() }, new TradeServiceWcf()) });
////Stock call to startup the Master Host.
//base.startService(new Settings(), new ConfigurationService(), new NodeCommunication(), null, new ConfigurationActions(true), startupList, null, new object[] { typeof(IOrderProcessor) });
-
- Trade.BusinessServiceConfigurationSettings.Settings thisSettings = new Trade.BusinessServiceConfigurationSettings.Settings();
+
+ Trade.BusinessServiceConfigurationSettings.Settings thisSettings = new Trade.BusinessServiceConfigurationSettings.Settings();
Trade.OrderProcessorServiceConfigurationSettings.Settings thisOPSSettings = new Trade.OrderProcessorServiceConfigurationSettings.Settings();
-
-
+
+
Uri TradeServiceUriBase = new Uri("http://" + myName + ":9000/tradebusinessservice");
//Create a ServiceHost for the Orderprocessor service.
Type serviceType = typeof(TradeServiceWcf);
- ServiceHost host = new ServiceHost(serviceType, TradeServiceUriBase);
- addEndpointsAndBehaviors(host, TradeServiceUriBase);
- host.Open();
+ serviceHost = new ServiceHost(serviceType, TradeServiceUriBase);
+ addEndpointsAndBehaviors(serviceHost, TradeServiceUriBase);
+ serviceHost.Open();
}
-
+
private ServiceHost addEndpointsAndBehaviors(ServiceHost host, Uri uri)
{
- ServiceMetadataBehavior mexbehavior = new ServiceMetadataBehavior();
- mexbehavior.HttpGetEnabled = true;
- mexbehavior.HttpGetUrl = uri;
- host.Description.Behaviors.Add(mexbehavior);
- Binding mexHttpBinding = MetadataExchangeBindings.CreateMexHttpBinding();
- ServiceEndpoint sepMex = host.AddServiceEndpoint(typeof(IMetadataExchange),mexHttpBinding,uri.AbsoluteUri + "/mex");
- BasicHttpBinding httpBinding = new BasicHttpBinding("Host_BasicHttpBinding");
- WSHttpBinding wsHttpBinding = new WSHttpBinding("Host_WsHttpBinding_M_Security");
- host.AddServiceEndpoint(typeof(ITradeServices), httpBinding, "");
- host.AddServiceEndpoint(typeof(ITradeServices), wsHttpBinding, "msec");
-
- //iterate and display all endpoints via host.Description.Endpoints
- //Describe for Console output
- StockTraderUtility.DescribeService(host);
+ ServiceMetadataBehavior mexbehavior = new ServiceMetadataBehavior();
+ mexbehavior.HttpGetEnabled = true;
+ mexbehavior.HttpGetUrl = uri;
+ host.Description.Behaviors.Add(mexbehavior);
+ Binding mexHttpBinding = MetadataExchangeBindings.CreateMexHttpBinding();
+ ServiceEndpoint sepMex = host.AddServiceEndpoint(typeof(IMetadataExchange), mexHttpBinding, uri.AbsoluteUri + "/mex");
+ BasicHttpBinding httpBinding = new BasicHttpBinding("Host_BasicHttpBinding");
+ WSHttpBinding wsHttpBinding = new WSHttpBinding("Host_WsHttpBinding_M_Security");
+ host.AddServiceEndpoint(typeof(ITradeServices), httpBinding, "");
+ host.AddServiceEndpoint(typeof(ITradeServices), wsHttpBinding, "msec");
- return host;
+ //iterate and display all endpoints via host.Description.Endpoints
+ //Describe for Console output
+ StockTraderUtility.DescribeService(host);
+
+ return host;
+ }
+
+ public void Dispose()
+ {
+ if (serviceHost != null)
+ serviceHost.Close();
}
}
[STAThread]
static void Main(string[] args)
{
+ Console.Clear();
Console.SetWindowSize(Console.LargestWindowWidth - 30, Console.LargestWindowHeight - 30);
Console.Title = ".NET StockTrader Business Services Host";
- MyHost myHost = new MyHost();
- myHost.startUp();
- Console.WriteLine(" ORDER_PROCESSING_MODE is currently = {0}\n", Trade.BusinessServiceConfigurationSettings.Settings.ORDER_PROCESSING_MODE);
- Console.WriteLine(" {0} is started.\n Press any key to quit.", Console.Title);
- Console.ReadLine();
+
+ bool restart = true;
+ while (restart)
+ {
+ using (var serviceHost = new BusinessServiceConsoleHost())
+ {
+ serviceHost.start();
+
+ Console.WriteLine(" ORDER_PROCESSING_MODE is currently = {0}\n",
+ Trade.BusinessServiceConfigurationSettings.Settings.ORDER_PROCESSING_MODE);
+ Console.WriteLine(" {0} is started\n", Console.Title);
+
+ Console.WriteLine("Press Enter to quit or Ctrl+R to restart");
+
+ restart = WaitForRestart();
+ }
+ }
+ }
+
+ private static bool WaitForRestart()
+ {
+ while (true)
+ {
+ // clear users input
+ Console.CursorLeft = 0;
+ Console.Write(' ');
+ Console.CursorLeft = 0;
+
+ // read users input
+ var key = Console.ReadKey();
+ if ((key.Modifiers & ConsoleModifiers.Control) != 0
+ && key.Key == ConsoleKey.R)
+ {
+ // create a new object to reload the static data.
+ var settings =
+ new Trade.BusinessServiceConfigurationSettings.Settings();
+ return true;
+ }
+ if (key.Key == ConsoleKey.Enter || key.Key == ConsoleKey.Escape)
+ {
+ return false;
+ }
+ }
}
}
}