// .Net StockTrader Sample WCF Application for Benchmarking, Performance Analysis and Design Considerations for Service-Oriented Applications //====================================================================================================== // This is one of three optional host programs for the Business Service Layer. In this case a Console // application. You can also optionally run the Windows host, as well as the IIS-hosted implementation. //====================================================================================================== //====================================================================================================== // Code originally contributed by Microsoft Corporation. // This contribution to the Stonehenge project is limited strictly // to the source code that is submitted in this submission. // Any technology, including underlying platform technology, // that is referenced or required by the submitted source code // is not a part of the contribution. // For example and not by way of limitation, // any systems/Windows libraries (WPF, WCF, ASP.NET etc.) // required to run the submitted source code is not a part of the contribution //====================================================================================================== using System; using System.Text; using System.Collections.Generic; using System.Configuration; using System.Diagnostics; using System.Threading; using System.ServiceModel; using System.ServiceModel.Configuration; using System.ServiceModel.Channels; using System.ServiceModel.Description; using System.ServiceModel.Dispatcher; using System.ServiceModel.Activation; using System.Net; using Trade.BusinessServiceConfigurationSettings; using Trade.BusinessServiceImplementation; using Trade.BusinessServiceContract; using Trade.OrderProcessorContract; using Trade.OrderProcessorServiceConfigurationSettings; using Trade.Utility; namespace Trade.BusinessServiceConsole { class BusinessService_ConsoleHost { /// /// The program entry class. Note how this simply inherits from the provided base class. /// class MyHost { /// /// This is the key call where you will define parameters for the Master host startup, and call /// the base 'startService' method. /// public void startUp() { string shortHostName = System.Net.Dns.GetHostName(); IPHostEntry myEntry = System.Net.Dns.GetHostEntry(shortHostName); string myName = myEntry.HostName; //The key call to create our list of runtime hosts to be initialized. //List startupList = new List(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.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(); } 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); return host; } } [STAThread] static void Main(string[] args) { 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(); } } }