// .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();
}
}
}