From stonehenge-commits-return-30-apmail-incubator-stonehenge-commits-archive=incubator.apache.org@incubator.apache.org Fri Dec 19 17:59:38 2008 Return-Path: Delivered-To: apmail-incubator-stonehenge-commits-archive@locus.apache.org Received: (qmail 16174 invoked from network); 19 Dec 2008 17:59:38 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 19 Dec 2008 17:59:38 -0000 Received: (qmail 12462 invoked by uid 500); 19 Dec 2008 17:59:51 -0000 Delivered-To: apmail-incubator-stonehenge-commits-archive@incubator.apache.org Received: (qmail 12442 invoked by uid 500); 19 Dec 2008 17:59:51 -0000 Mailing-List: contact stonehenge-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: stonehenge-dev@incubator.apache.org Delivered-To: mailing list stonehenge-commits@incubator.apache.org Delivered-To: moderator for stonehenge-commits@incubator.apache.org Received: (qmail 96258 invoked by uid 99); 19 Dec 2008 17:44:17 -0000 X-ASF-Spam-Status: No, hits=3.1 required=10.0 tests=FRT_PENIS1,WHOIS_NETSOLPR X-Spam-Check-By: apache.org Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: svn commit: r728078 [4/9] - in /incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution: ./ BasicClient/ BasicClient/Properties/ BusinessServiceConfigurationSettings/ BusinessServiceConfigurationSettings/Properties/ Busine... Date: Fri, 19 Dec 2008 17:43:32 -0000 To: stonehenge-commits@incubator.apache.org From: drewbai@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20081219174335.D11DA23889D6@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Added: incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/ServiceConfigurationSettings/Settings.cs URL: http://svn.apache.org/viewvc/incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/ServiceConfigurationSettings/Settings.cs?rev=728078&view=auto ============================================================================== --- incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/ServiceConfigurationSettings/Settings.cs (added) +++ incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/ServiceConfigurationSettings/Settings.cs Fri Dec 19 09:43:28 2008 @@ -0,0 +1,147 @@ +// .NET StockTrader Sample WCF Application for Benchmarking, Performance Analysis and Design Considerations for Service-Oriented Applications + +//====================================================================================================== +// The Settings class for the StockTrader Web Application. Please note well that we only override the +// inherited settings (with the new keyword) becuase of the special case StockTrader allows for running +// BSL in-process with the StockTrader Composite Web Application, vs. remote calls. You will NOT need to +// do this for your services--your Settings class will be much simpler, simply using the *inherited* +// global settings, and only specifying app-specific settings here. +//====================================================================================================== + +//====================================================================================================== +// 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.Collections.Generic; +using System.Configuration; +using System.Web; +using System.Data; +using System.Collections; +using System.Diagnostics; +using System.Messaging; +using System.Text; +using System.Reflection; +using Trade.Utility; + +namespace Trade.StockTraderWebApplicationSettings +{ + /// + /// Any app or service implementing the Configuration Service needs a custom Settings class that will contain it's + /// config settings. These are (largely) loaded from the SQL repository on startup with current values as set for service. + /// Your custom settings class should inherit from the ConfigurationSettingsBase class, which contains common + /// settings used by all services implementing the config service. + /// + public class Settings //db : ConfigurationSettingsBase //Inherit from base implementation!! + { + + + public static string BSL_DOTNET_ENDPOINT_CONFIG_HTTP; + public static string BSL_DOTNET_ENDPOINT_CONFIG_WSHTTP; + public static string BSL_WSO2_ENDPOINT_CONFIG_WSHTTP; + public static string BSL_USERID; + public static string BSL_PASSWORD; + + public static string ACCESS_MODE; + public static int MAX_DISPLAY_ORDERS; + public static int MAX_DISPLAY_TOP_ORDERS; + public static bool DISPLAY_DUPLICATE_KEY_EXCEPTIONS; + public static bool CHECK_ORDER_ALERT_EVERY_REQUEST; + public static int ORDER_ALERT_CHECK_FREQUENCY; + public static string EVENT_LOG; + + public static int interfaceMode = -1; + + public static readonly string CACHE_KEY_CLOSED_ORDERSALERT = "O"; + + + //Page Names for StockTrader application + public static readonly string PAGE_HOME = "TradeHome.aspx"; + public static readonly string PAGE_LOGIN = "Login.aspx"; + public static readonly string PAGE_LOGOUT = "Logout.aspx"; + public static readonly string PAGE_QUOTES = "Quotes.aspx"; + public static readonly string PAGE_ORDER = "Order.aspx"; + public static readonly string PAGE_TRADE = "StockTrade.aspx"; + public static readonly string PAGE_PORTFOLIO = "Portfolio.aspx"; + //public static readonly string PAGE_PATH_CONFIG = "ConfigWeb/default.aspx"; + + //Trade HTML Fomatting Constants + public static readonly string GAINSTYLECSS = "GainTextStyle"; + public static readonly string LOSSSTYLECSS = "LossTextStyle"; + public static readonly string UPARROWLINK = "\"\""; + public static readonly string DOWNARROWLINK = "\"\""; + + /// + /// Settings (Constructor) - handles the config. + /// Sets the items in the appSettings to public variables. + /// + static Settings() + { + Settings.ACCESS_MODE = ConfigurationManager.AppSettings.Get("ACCESS_MODE"); + Settings.EVENT_LOG = ConfigurationManager.AppSettings.Get("EVENT_LOG"); + Settings.MAX_DISPLAY_ORDERS = Convert.ToInt32(ConfigurationManager.AppSettings.Get("MAX_DISPLAY_ORDERS")); + Settings.MAX_DISPLAY_TOP_ORDERS = Convert.ToInt32(ConfigurationManager.AppSettings.Get("MAX_DISPLAY_TOP_ORDERS")); + Settings.DISPLAY_DUPLICATE_KEY_EXCEPTIONS = Convert.ToBoolean(ConfigurationManager.AppSettings.Get("DISPLAY_DUPLICATE_KEY_EXCEPTIONS")); + Settings.CHECK_ORDER_ALERT_EVERY_REQUEST = Convert.ToBoolean(ConfigurationManager.AppSettings.Get("DISPLAY_DUPLICATE_KEY_EXCEPTIONS")); + Settings.ORDER_ALERT_CHECK_FREQUENCY = Convert.ToInt32(ConfigurationManager.AppSettings.Get("ORDER_ALERT_CHECK_FREQUENCY")); + Settings.BSL_DOTNET_ENDPOINT_CONFIG_HTTP = ConfigurationManager.AppSettings.Get("BSL_DOTNET_ENDPOINT_CONFIG_HTTP"); + Settings.BSL_DOTNET_ENDPOINT_CONFIG_WSHTTP = ConfigurationManager.AppSettings.Get("BSL_DOTNET_ENDPOINT_CONFIG_WSHTTP"); + Settings.BSL_WSO2_ENDPOINT_CONFIG_WSHTTP = ConfigurationManager.AppSettings.Get("BSL_WSO2_ENDPOINT_CONFIG_WSHTTP"); + Settings.BSL_USERID = ConfigurationManager.AppSettings.Get("BSL_USERID"); + Settings.BSL_PASSWORD = ConfigurationManager.AppSettings.Get("BSL_PASSWORD"); + + setAccessMode(); + + } + + + /// + /// Sets the selected AccessMode to an int constant. Faster for switch statements than parsing a string. + /// + static public int setAccessMode() + { + switch (ACCESS_MODE) + { + case StockTraderUtility.ACCESS_STRING_Direct: + { + //no endpoint needs to be set in this mode. + interfaceMode = StockTraderUtility.ACCESS_Direct; + break; + } + case StockTraderUtility.ACCESS_STRING_WEB_SERVICE_HTTP: + { + interfaceMode = StockTraderUtility.ACCESS_WebService_Http; + break; + } + + case StockTraderUtility.ACCESS_STRING_WEB_SERVICE_HTTP_MESECURITY: + { + interfaceMode = StockTraderUtility.ACCESS_WebService_WSHttp; + break; + } + + case StockTraderUtility.ACCESS_STRING_WSO2_WEB_SERVICE_HTTP_MESECURITY: + { + interfaceMode = StockTraderUtility.ACCESS_WebService_WSHttp_WSO2; + break; + } + + + default: + { + throw new Exception(ACCESS_MODE + ": " + StockTraderUtility.EXCEPTION_MESSAGE_INVALID_ACCESSMODE_CONFIG); + } + } + return interfaceMode; + } + } +} \ No newline at end of file Added: incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/ServiceConfigurationSettings/StockTraderWebApplicationSettings.csproj URL: http://svn.apache.org/viewvc/incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/ServiceConfigurationSettings/StockTraderWebApplicationSettings.csproj?rev=728078&view=auto ============================================================================== --- incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/ServiceConfigurationSettings/StockTraderWebApplicationSettings.csproj (added) +++ incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/ServiceConfigurationSettings/StockTraderWebApplicationSettings.csproj Fri Dec 19 09:43:28 2008 @@ -0,0 +1,123 @@ + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {D8E1ECD5-2D86-4994-A37B-BF4D24334A2E} + Library + Properties + Trade.StockTraderWebApplicationSettings + Trade.StockTraderWebApplicationSettings + + + true + stocktrader.snk + + + + + 2.0 + + + + + + + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\release\ + TRACE + prompt + 4 + + + + + + + + False + ..\..\..\..\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\System.ServiceModel.dll + + + + False + ..\..\SharedLibraries\Trade.Utility.dll + + + + + + + + + + + + False + .NET Framework Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + false + + + + + + + + + \ No newline at end of file Added: incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/ServiceConfigurationSettings/stocktrader.snk URL: http://svn.apache.org/viewvc/incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/ServiceConfigurationSettings/stocktrader.snk?rev=728078&view=auto ============================================================================== Binary file - no diff available. Propchange: incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/ServiceConfigurationSettings/stocktrader.snk ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/Properties/AssemblyInfo.cs URL: http://svn.apache.org/viewvc/incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/Properties/AssemblyInfo.cs?rev=728078&view=auto ============================================================================== --- incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/Properties/AssemblyInfo.cs (added) +++ incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/Properties/AssemblyInfo.cs Fri Dec 19 09:43:28 2008 @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Trade.Utility")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct(".NET StockTrader")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2008")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("935b3aba-e23e-46fd-b80e-789a04810b8a")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("2.0.2.0")] +[assembly: AssemblyFileVersion("2.0.2.0")] Added: incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/SQLHelper.cs URL: http://svn.apache.org/viewvc/incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/SQLHelper.cs?rev=728078&view=auto ============================================================================== --- incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/SQLHelper.cs (added) +++ incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/SQLHelper.cs Fri Dec 19 09:43:28 2008 @@ -0,0 +1,318 @@ +// .NET Service Configuration V2.0 for Design Considerations for Service-Oriented Applications based on Windows Communication Foundation. Created with Microsoft .NET Framework 3.5 and Microsoft Visual Studio. Copyright 2008, Microsoft Corporation. + +//====================================================================================================== +//This file contains SQLHelper logic, largely derived/modified from the MSDN Data Access Block. It +//has the methods that perform ALL ADO.NET operations. +//====================================================================================================== + +using System; +using System.Configuration; +using System.Data; +using System.Data.SqlClient; +using System.Collections; + +namespace Trade.Utility +{ + + /// + /// The SQLHelper class is intended to encapsulate high performance, + /// scalable best practices for common uses of SqlClient. + /// + public abstract class SQLHelper + { + + // Hashtable to store cached parameters + private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable()); + + + /// + /// Create and execute a command to return DataReader after binding to a single parameter. + /// + /// Connection to execute against. If not open, it will be here. + /// ADO transaction. If null, will not be attached to the command + /// Type of ADO command; such as Text or Procedure + /// The actual SQL or the name of the Stored Procedure depending on command type + /// The single SqlParameter object to bind to the query. + public static SqlDataReader ExecuteReaderSingleParm(SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter singleParm) + { + SqlCommand cmd = new SqlCommand(); + if (conn.State != ConnectionState.Open) + conn.Open(); + cmd.Connection = conn; + if (trans != null) + cmd.Transaction = trans; + cmd.CommandText = cmdText; + cmd.Parameters.Add(singleParm); + SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SingleResult); + return rdr; + } + + /// + /// Create and execute a command to return a single-row DataReader after binding to a single parameter. + /// + /// Connection to execute against. If not open, it will be here. + /// ADO transaction. If null, will not be attached to the command + /// Type of ADO command; such as Text or Procedure + /// The actual SQL or the name of the Stored Procedure depending on command type + /// The single SqlParameter object to bind to the query. + public static SqlDataReader ExecuteReaderSingleRowSingleParm(SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter singleParm) + { + if (conn.State != ConnectionState.Open) + conn.Open(); + SqlCommand cmd = new SqlCommand(); + cmd.Connection = conn; + if (trans != null) + cmd.Transaction = trans; + cmd.CommandText = cmdText; + cmd.Parameters.Add(singleParm); + SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SingleRow); + return rdr; + } + + /// + /// Create and execute a command to return a single-row DataReader after binding to multiple parameters. + /// + /// Connection to execute against. If not open, it will be here. + /// ADO transaction. If null, will not be attached to the command + /// Type of ADO command; such as Text or Procedure + /// The actual SQL or the name of the Stored Procedure depending on command type + /// An array of SqlParameter objects to bind to the query. + public static SqlDataReader ExecuteReaderSingleRow(SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) + { + if (conn.State != ConnectionState.Open) + conn.Open(); + SqlCommand cmd = new SqlCommand(); + cmd.Connection = conn; + if (trans != null) + cmd.Transaction = trans; + cmd.CommandText = cmdText; + PrepareCommand(cmd, cmdParms); + SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SingleRow); + return rdr; + } + + /// + /// Create and execute a command to return a DataReader, no parameters used in the command. + /// + /// Connection to execute against. If not open, it will be here. + /// ADO transaction. If null, will not be attached to the command + /// Type of ADO command; such as Text or Procedure + /// The actual SQL or the name of the Stored Procedure depending on command type + public static SqlDataReader ExecuteReaderNoParm(SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText) + { + if (conn.State != ConnectionState.Open) + conn.Open(); + SqlCommand cmd = new SqlCommand(); + cmd.Connection = conn; + if (trans != null) + cmd.Transaction = trans; + cmd.CommandText = cmdText; + SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SingleResult); + return rdr; + } + + /// + /// Create and execute a command to return a DataReader after binding to multiple parameters. + /// + /// Connection to execute against. If not open, it will be here. + /// ADO transaction. If null, will not be attached to the command + /// Type of ADO command; such as Text or Procedure + /// The actual SQL or the name of the Stored Procedure depending on command type + /// An array of SqlParameter objects to bind to the query. + public static SqlDataReader ExecuteReader(SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) + { + if (conn.State != ConnectionState.Open) + conn.Open(); + SqlCommand cmd = new SqlCommand(); + cmd.Connection = conn; + if (trans != null) + cmd.Transaction = trans; + cmd.CommandText = cmdText; + PrepareCommand(cmd, cmdParms); + SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SingleResult); + return rdr; + } + + /// + /// Create and execute a command to return a single scalar (int) value after binding to multiple parameters. + /// + /// Connection to execute against. If not open, it will be here. + /// ADO transaction. If null, will not be attached to the command + /// Type of ADO command; such as Text or Procedure + /// The actual SQL or the name of the Stored Procedure depending on command type + /// An array of SqlParameter objects to bind to the query. + public static int ExecuteScalar(SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) + { + if (conn.State != ConnectionState.Open) + conn.Open(); + SqlCommand cmd = new SqlCommand(); + cmd.CommandText = cmdText; + cmd.Connection = conn; + if (trans != null) + cmd.Transaction = trans; + PrepareCommand(cmd, cmdParms); + int val = Convert.ToInt32(cmd.ExecuteScalar()); + return val; + } + + + /// + /// Create and execute a command to return a single scalar (int) value after binding to a single parameter. + /// + /// Connection to execute against. If not open, it will be here. + /// ADO transaction. If null, will not be attached to the command + /// Type of ADO command; such as Text or Procedure + /// The actual SQL or the name of the Stored Procedure depending on command type + /// A SqlParameter object to bind to the query. + public static int ExecuteScalarSingleParm(SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter singleParm) + { + if (conn.State != ConnectionState.Open) + conn.Open(); + SqlCommand cmd = new SqlCommand(); + cmd.CommandText = cmdText; + cmd.Connection = conn; + if (trans != null) + cmd.Transaction = trans; + cmd.Parameters.Add(singleParm); + int val = Convert.ToInt32(cmd.ExecuteScalar()); + return val; + } + + /// + /// Create and execute a command to return a single scalar (int) value. No parameters will be bound to the command. + /// + /// Connection to execute against. If not open, it will be here. + /// ADO transaction. If null, will not be attached to the command + /// Type of ADO command; such as Text or Procedure + /// The actual SQL or the name of the Stored Procedure depending on command type + /// A SqlParameter object to bind to the query. + public static object ExecuteScalarNoParm(SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText) + { + if (conn.State != ConnectionState.Open) + conn.Open(); + SqlCommand cmd = new SqlCommand(); + cmd.CommandText = cmdText; + cmd.Connection = conn; + if (trans != null) + cmd.Transaction = trans; + object val = cmd.ExecuteScalar(); + return val; + } + + /// + /// Create and execute a command that returns no result set after binding to multiple parameters. + /// + /// Connection to execute against. If not open, it will be here. + /// ADO transaction. If null, will not be attached to the command + /// Type of ADO command; such as Text or Procedure + /// The actual SQL or the name of the Stored Procedure depending on command type + /// An array of SqlParameter objects to bind to the query. + public static int ExecuteNonQuery(SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) + { + if (conn.State != ConnectionState.Open) + conn.Open(); + SqlCommand cmd = new SqlCommand(); + cmd.Connection = conn; + if (trans != null) + cmd.Transaction = trans; + cmd.CommandText = cmdText; + PrepareCommand(cmd, cmdParms); + int val = cmd.ExecuteNonQuery(); + return val; + } + + /// + /// Create and execute a command that returns no result set after binding to a single parameter. + /// + /// Connection to execute against. If not open, it will be here. + /// ADO transaction. If null, will not be attached to the command + /// Type of ADO command; such as Text or Procedure + /// The actual SQL or the name of the Stored Procedure depending on command type + /// A SqlParameter object to bind to the query. + public static int ExecuteNonQuerySingleParm(SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter singleParam) + { + if (conn.State != ConnectionState.Open) + conn.Open(); + SqlCommand cmd = new SqlCommand(); + cmd.Connection = conn; + if (trans != null) + cmd.Transaction = trans; + cmd.CommandText = cmdText; + cmd.Parameters.Add(singleParam); + int val = cmd.ExecuteNonQuery(); + return val; + } + + /// + /// Create and execute a command that returns no result set after binding to a single parameter. + /// + /// Connection to execute against. If not open, it will be here. + /// ADO transaction. If null, will not be attached to the command + /// Type of ADO command; such as Text or Procedure + /// The actual SQL or the name of the Stored Procedure depending on command type + /// A SqlParameter object to bind to the query. + public static int ExecuteNonQueryNoParm(SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText) + { + if (conn.State != ConnectionState.Open) + conn.Open(); + SqlCommand cmd = new SqlCommand(); + cmd.Connection = conn; + if (trans != null) + cmd.Transaction = trans; + cmd.CommandText = cmdText; + int val = cmd.ExecuteNonQuery(); + return val; + } + + /// + /// add parameter array to the cache + /// + /// Key to the parameter cache + /// an array of SqlParamters to be cached + public static void CacheParameters(string cacheKey, params SqlParameter[] cmdParms) + { + parmCache[cacheKey] = cmdParms; + } + + /// + /// Retrieve cached parameters + /// + /// key used to lookup parameters + /// Cached SqlParamters array + public static SqlParameter[] GetCacheParameters(string cacheKey) + { + SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey]; + + if (cachedParms == null) + return null; + + SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length]; + + for (int i = 0, j = cachedParms.Length; i < j; i++) + clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone(); + + return clonedParms; + } + + /// + /// Prepare a command for execution + /// + /// SqlCommand object + /// SqlConnection object + /// SqlTransaction object + /// Cmd type e.g. stored procedure or text + /// Command text, e.g. Select * from Products + /// SqlParameters to use in the command + private static void PrepareCommand(SqlCommand cmd, SqlParameter[] cmdParms) + { + if (cmdParms != null) + { + for (int i = 0; i < cmdParms.Length; i++) + { + SqlParameter parm = (SqlParameter)cmdParms[i]; + cmd.Parameters.Add(parm); + } + } + } + } +} \ No newline at end of file Added: incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/Utility.cs URL: http://svn.apache.org/viewvc/incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/Utility.cs?rev=728078&view=auto ============================================================================== --- incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/Utility.cs (added) +++ incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/Utility.cs Fri Dec 19 09:43:28 2008 @@ -0,0 +1,447 @@ +// .Net StockTrader Sample WCF Application for Benchmarking, Performance Analysis and Design Considerations for Service-Oriented Applications +//====================================================================================================== +// 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 +//====================================================================================================== +//====================================================================================================== +// Contains .NET StockTrader application specific utility methods and constants/statics used by the app. +//====================================================================================================== + + +using System; +using System.Collections.Generic; +using System.Text; +using System.Diagnostics; +using System.Net.Security; +using System.ServiceModel; +using System.ServiceModel.Description; +using System.ServiceModel.Configuration; +using System.IdentityModel.Tokens; +using System.IdentityModel.Selectors; +using System.Security.Cryptography.X509Certificates; + +namespace Trade.Utility +{ + /// + /// Utility class with constants used in StockTrader app/services. + /// + public static class StockTraderUtility + { + //Exception Messages and Strings + public static readonly string EXCEPTION_DOTNET_DUPLICATE_PRIMARY_KEY = "Violation of PRIMARY KEY"; + public static readonly string EXCEPTION_WEBSPHERE_DUPLICATE_PRIMARY_KEY = "org.omg.CORBA.portable.UnknownException"; + public static readonly string EXCEPTION_MESSAGE_INVALID_ORDERMODE_CONFIG = "This 'OrderMode' setting is not a valid setting (settings are case-sensitive)."; + public static readonly string EXCEPTION_MESSAGE_INVALID_TXMMODEL_CONFIG = "This 'Use System.Transactions Globally' setting is not a valid setting. Valid settings are 'true' or 'false'. Please fix in: "; + public static readonly string EXCEPTION_MESSAGE_VALID_ORDERMODEVALUES = "Valid values are: 'Sync_InProcess', 'ASync_Msmq', 'ASync_Msmq_Volatile', 'ASync_Tcp', 'ASync_Http'."; + public static readonly string EXCEPTION_MESSAGE_INVALID_HOLDING_BAD_QUOTE = "Holding with non-valid Quote Symbol: holdingID="; + public static readonly string EXCEPTION_MESSAGE_INVALID_HOLDING_NOT_FOUND = "Holding not found!"; + public static readonly string EXCEPTION_MESSAGE_INVALID_HOLDING_ZERO_BASIS = "Holding with zero basis!: holdingID="; + public static readonly string EXCEPTION_MESSAGE_NULL_DATE = "Data is Null. This method or property cannot be called on Null values."; + public static readonly string EXCEPTION_MESSAGE_BAD_ORDER_PARMS = "Your order was not placed becuase the requested quantity was not valid."; + public static readonly string EXCEPTION_MESSAGE_BAD_ORDER_RETURN = "We are sorry but your order could not be placed. Please try again later."; + public static readonly string EXCEPTION_MESSAGE_ACID_REGISTRATION = "ACID TEST ON INSERT USERID 'ACID': PLANNED EXCEPTION THROWN!"; + public static readonly string EXCEPTION_MESSAGE_ACID_BUY = "PLANNED ACID TEST: SYMBOL 'ACIDBUY' PLANNED EXCEPTION THROWN!"; + public static readonly string EXCEPTION_MESSAGE_ACID_SELL = "PLANNED ACID TEST: SYMBOL 'ACIDSELL' PLANNED EXCEPTION THROWN!"; + public static readonly string EXCEPTION_MESSAGE_BADORDERTYPE = "Sorry, this order type is not allowed."; + public static readonly string EXCEPTION_MESSAGE_INVALID_ORDERFORWARDBEHAVIOR_CONFIG = "This 'Order Processing Behavior' setting is not a valid setting (settings are case-sensitive). Please fix in: "; + public static readonly string EXCEPTION_MESSAGE_INVALID_ORDERFORWARDMODE_CONFIG = "This 'OrderForwardMode' setting is not a valid setting (settings are case-sensitive). Please fix in: "; + public static readonly string EXCEPTION_MESSAGE_VALID_ORDERFORWARDMODEVALUES = "Valid values are: 'ASync_Msmq', 'ASync_Msmq_Volatile', 'ASync_Tcp', 'ASync_Http'."; + public static readonly string EXCEPTION_MESSAGE_VALID_ORDERFORWARDBEHAVIORVALUES = "Valid values are: 'Forward' and 'Standard'."; + public static readonly string EXCEPTION_WEBSPHERE_USERID_NOTFOUND = "javax.ejb.ObjectNotFoundException"; + public static readonly string EXCEPTION_WEBSPHERE_INVALID_PASSWORD = "Incorrect password"; + public static readonly string EXCEPTION_MESSAGE_INVALID_ACCESSMODE_CONFIG = "This 'AccessMode' setting is not a valid setting (settings are case-sensitive)."; + public static readonly string EXCEPTION_MESSAGE_VALID_ACCESSMODEVALUES = "Valid values are: 'InProcess' (for in-process activation), 'Http_WebService' (for SOA activation via WCF Self-Host/Http), 'Tcp_WebService' (for SOA activation via WCF Self-Host/Tcp), 'Asmx_WebService' (for SOA activation via ASMX) and 'WebSphere_WebService' (for SOA activation via WCF against IBM Trade 6.1 services)."; + public static readonly string EXCEPTION_MESSAGE_DUPLICATE_PRIMARY_KEY = "User ID Already Exists! Please Try a Different User ID."; + public static readonly string EXCEPTION_MESSAGE_INVALID_LOGIN = "Error Logging In. Invalid Username or Password!"; + + + //Define max lengths for input fields; + public static readonly int ADDRESS_MAX_LENGTH = 100; + public static readonly int EMAIL_MAX_LENGTH = 100; + public static readonly int CREDITCARD_MAX_LENGTH = 100; + public static readonly int FULLNAME_MAX_LENGTH = 100; + public static readonly int USERID_MAX_LENGTH = 50; + public static readonly int PASSWORD_MAX_LENGTH = 100; + public static readonly int OPENBALANCE_MAX_LENGTH = 20; + public static readonly int QUOTESYMBOL_MAX_LENGTH = 15; + public static readonly int SYMBOLSTRING_MAXLENGTH = 30; + + //Trade Business Logic constants + public static readonly decimal BUY_FEE = 15.95m; + public static readonly decimal SELL_FEE = 25.95m; + public static readonly decimal PENNY_STOCK_P = .1m; + public static readonly decimal STOCK_P_HIGH_BAR = 1000m; + public static readonly decimal STOCK_P_HIGH_BAR_CRASH = .05m; + public static readonly decimal JUNK_STOCK_MIRACLE_MULTIPLIER = 500m; + public static readonly int STOCK_CHANGE_MAX_PERCENT = 5; + + + //Valid Config Values for user-set "AccessMode" config setting. Note in all cases, the same + //WCF client (that inherits from LoadBalancingClient) is used. Just the binding and service host name varies. + public const string ACCESS_STRING_Direct = "InProcess"; + public const string ACCESS_STRING_WEB_SERVICE_HTTP = "Http_WebService"; + public const string ACCESS_STRING_WEB_SERVICE_HTTP_MESECURITY = "Http_WebService_MSecurity"; + public const string ACCESS_STRING_WSO2_WEB_SERVICE_HTTP_MESECURITY = "Http_WSO2_WebService_MSecurity"; + + //Map string/user-friendly modes to ints for faster lookups + public const int ACCESS_Direct = 0; + public const int ACCESS_WebService_Http = 1; + public const int ACCESS_WebService_WSHttp = 2; + public const int ACCESS_WebService_WSHttp_WSO2 = 3; + + //Valid Config Values for user-set "OrderMode" config setting. + public const string ORDER_STRING_Sync = "Sync_InProcess"; + public const string ORDER_STRING_ASyncHttp = "ASync_Http"; + public const string ORDER_STRING_ASyncHttpMSec = "ASync_Http_MSecurity"; + public const string ORDER_STRING_WSO2_HTTP_MSEC = "ASync_WSO2_Java_Http_MSecurity"; + + //OrderMode constants + public const int ORDER_Sync = 0; + public const int ORDER_ASync_Http = 1; + public const int ORDER_ASync_WSHttp = 2; + public const int ORDER_ASync_WSHttp_WSO2 = 3; + + //map user strings to ints for faster lookups. We want to catch invalid settings + //so the user knows what tx model they are running within a service. + public const string TRANSACTION_STRING_SYSTEMDOTTRANSACTION_TRANSACTION = "true"; + public const string TRANSACTION_STRING_ADONET_TRANSACTION = "false"; + public const int TRANSACTION_MODEL_SYSTEMDOTTRANSACTION_TRANSACTION = 1; + public const int TRANSACTION_MODEL_ADONET_TRANSACTION = 0; + + //ACID Test Codes + public static readonly string ACID_TEST_USER = "ACIDUSER"; + public static readonly string ACID_TEST_BUY = "ACIDBUY"; + public static readonly string ACID_TEST_SELL = "ACIDSELL"; + public const string REGISTER_USER = "Register"; + + //Service Host Names. These are good candidates to move into the various repositories to make them more dynamic + //than defined in code as constants. Perhaps for next release of StockTrader--easy to do. + public const string ORDER_PROCESSOR_SERVICE = "StockTrader Order Processor Service"; + + public const string WEBAPPLICATION = ".NET StockTrader Web Application"; + public const string BUSINESS_SERVICES = "StockTrader Business Services"; + + //Endpoint - Connected Service Names -- the various modes/bindings we can connect from Web app to Business Services + + //First for Business Services + public const string DOTNET_SELFHOST_BSL_HTTP = ".NET StockTrader Business Services Http/SOAP"; + public const string DOTNETSELFHOST_BSL_WSHTTP = ".NET StockTrader Business Services Http/WS-* (M-Security)"; + public const string WSO2_BSL_WSHTTP = "WSO2 StockTrader Business Services Http/WS-* (M-Security)"; + + //Now Endpoint - Connected Service Names for Order Processor + public const string DOTNET_SELFHOST_OPS_HTTP = ".NET Order Processor Async-Http (SOAP)"; + public const string DOTNET_SELFHOST_OPS_WSHTTP = ".NET Order Processor Async-Http WS-* (M-Security)"; + public const string WSO2_OPS_WSHTTP = "WSO2 Order Processor Async-Http WS-* (M-Security)"; + + + + + + //Order Codes + public const string ORDER_TYPE_BUY = "buy"; + public const string ORDER_TYPE_SELL = "sell"; + public const string ORDER_TYPE_SELL_ENHANCED = "sellEnhanced"; + public static readonly string ORDER_STATUS_OPEN = "open"; + public static readonly string ORDER_STATUS_CLOSED = "closed"; + public static readonly string ORDER_STATUS_COMPLETED = "completed"; + + public const string DAL_SQLSERVER = "Trade.DALSQLServer"; + public const string DAL_ORACLE = "Trade.DALOracle"; + public const string DAL_DB2 = "Trade.DALDB2"; + + //Used to cache a Random class used for calculating random price changes vs. creating new + //Random class on each buy/sell; + private static Random rand = new Random(DateTime.Now.Millisecond); + + + /// + /// Writes messages to Main console of Windows self-host base form or console. + /// String with message to display/log. + /// Event Log entry type code + /// Whether to log entry. Entry will be logged if configuration database is set for detailed logging and this parameter is true + /// Instance of the Settings class for the service host. Used to determine if detailed logging is on and Event Log Source name. + public static void writeConsoleMessage(string message, EventLogEntryType messageType, bool logEntry, string eventLog) + { + try + { + LogMessage(message, messageType, logEntry, eventLog); + } + catch + { + } + return; + } + + /// + /// Writes messages to errors console of Windows self-host base form or console. + /// + /// String with message to display/log. + /// Event Log entry type code + /// Whether to log entry. Entry will be logged if configuration database is set for detailed logging and this parameter is true + /// Instance of the Settings class for the service host. Used to determine if detailed logging is on and Event Log Source name. + public static void writeErrorConsoleMessage(string message, EventLogEntryType messageType, bool logEntry, string eventLog) + { + try + { + LogMessage(message, messageType, logEntry, eventLog); + } + catch + { + } + } + + /// Writes to event log. + /// String with message to display/log. + /// Event Log entry type code + /// Whether to log entry. Entry will be logged if configuration database is set for detailed logging and this parameter is true + /// Instance of the Settings class for the service host. Used to determine if detailed logging is on and Event Log Source name. + public static void LogMessage(string message, EventLogEntryType messageType, bool logEntry, string eventLog) + { + if (!logEntry) + return; + try + { + EventLog EventLog1 = new EventLog(); + EventLog1.Source = eventLog; + EventLog1.WriteEntry(message, messageType); + } + catch (Exception e) + { + //Choice here: sometimes Web apps will throw a security exception + //writing to the event log if the source is not setup properly and the account 'Network Service' + //given "Full Control" to the event log to be able to write entries. Really, this exception should + //be thrown so user knows they are not getting event log info; however, to avoid frustration + //for those that get it, I am simply trapping here. Otherwise, you may wish to uncomment this line: + // + // throw new Exception("An exception occurred attempting to write to the Windows Application Event Log. Please make sure the 'Network Service' account (the account ASP.NET runs under) has write access to the Application Event Log. You will use RegEdit to add permissions, refer to the StockTrader Readme.html for precise instructions.\nThe specific exception writing to the " + EVENT_LOG + " Application Log event source is: " + e.ToString()); + // + //So if you catch an exception here, check e to see if a security exception. If so, likely need to add Network + //Service to EventLog permissions via regedit, current control set, services, Event Log (select), then + //from main menu choose Permissions to add Network Service with Full Control (so ASP.NET/IIS can create/and write to). + string throwaway = e.Message; + } + } + + //Dermines how much a stock price will change after a trade. + public static decimal getRandomPriceChangeFactor(decimal current_price) + { + if (current_price <= PENNY_STOCK_P) + return JUNK_STOCK_MIRACLE_MULTIPLIER; + else if (current_price >= STOCK_P_HIGH_BAR) + return STOCK_P_HIGH_BAR_CRASH; + decimal factor = 0m; + int y = rand.Next(1, STOCK_CHANGE_MAX_PERCENT); + int x = rand.Next(); + if (x % 2 == 0) + { + factor = 1 - ((decimal)y) / 100m; + } + else + factor = 1 + ((decimal)y) / 100m; + return factor; + } + + //How much the brokerage is going to charge! + public static decimal getOrderFee(string orderType) + { + if (orderType.ToLower().Equals(ORDER_TYPE_BUY) || orderType.ToLower().Equals(ORDER_TYPE_SELL)) + return BUY_FEE; + else + return SELL_FEE; + } + + public static void DescribeService(ServiceHost host) + { + //iterate and display all endpoints via host.Description.Endpoints + Console.WriteLine("\n"); + Console.WriteLine("Configuration for {0} \n", Console.Title); + + ServiceDescription svcDesc = host.Description; + string configName = svcDesc.ConfigurationName; + Console.WriteLine("Configuration name: {0}", configName); + + // Iterate through the endpoints contained in the ServiceDescription + ServiceEndpointCollection sec = svcDesc.Endpoints; + foreach (ServiceEndpoint se in sec) + { + Console.WriteLine("Endpoint:"); + Console.WriteLine("\tAddress: {0}", se.Address.ToString()); + Console.WriteLine("\tBinding: {0}", se.Binding.ToString()); + Console.WriteLine("\tContract: {0}", se.Contract.ToString()); + KeyedByTypeCollection behaviors = se.Behaviors; + foreach (IEndpointBehavior behavior in behaviors) + { + Console.WriteLine("Behavior: {0}", behavior.ToString()); + } + } + + string name = svcDesc.Name; + Console.WriteLine("Service Description name: {0}", name); + + string namespc = svcDesc.Namespace; + Console.WriteLine("Service Description namespace: {0}", namespc); + + Type serviceType = svcDesc.ServiceType; + Console.WriteLine("Service Type: {0}", serviceType.ToString()); + + + Console.WriteLine("\n"); + } + } + + +//====================================================================================================== +//This class contains abstract classes that can be optionally used to authenticate clients when using +//advanced Web Services security modes. Three abstract classes are provided, such that any can be +//overridden and customized. The first ConfigCertificatePolicy, allows the developer to set a custom +//policy for certificates. This is necessary to allow test/dev/self-signed certificates, or else +//all WCF operations secured with such a cert would be rejected by WCf clients. Note that the base +//SettingsBase class provides a stock instance of this class, which allows all certs if the repository +//setting "Accept All Certificates for Development Testing" is set to true. The base instance, which +//can be overridden itself within any Settings class (use the new keyword to define the field certificatePolicy +//with your implementation class if you want. +// +//The next two classes are custom validators that are provided. The first class (CustomUserNameValidator) +//works with message level security (which always requires a service X.509 certificate) and Username +//client credentials. It overrides the default Validate method of the Windows UserNamePassWordValidator to +//instead validate against the ConfigService Users table. See StockTrader Business Services for an example with +//Message security and Username client credentials. +//The second class (CustomCertificateValidator) overrides the Validate method of the Windows X509CertificateValidator +//to only allow specified set of client certificates to have access to secured endpoints. +//====================================================================================================== + + /// + /// This class is used when repository setting 'ACCEPT_ALL_CERTIFICATES' is set to true, to allow service + /// connections via Test (dev-created) certificates. You can override the CheckValidationResult as desired, + /// to add a more restrictive/custom policy. + /// + public abstract class ConfigCertificatePolicy + { + public ConfigCertificatePolicy() + { + } + + /// + /// As advertised, always OK. Do not have 'ACCEPT_ALL_CERTIFICATES' set to true for production; or override for more restrictive, + /// custom policy. + /// + /// + /// + /// + /// + /// + public virtual bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) + { + bool validationResult = true; + //Optional add a more restrictive policy here. + return validationResult; + } + } + + + /// + /// Note how this class is tied in via a ServiceBehavior, defined in config, to override default Windows auth validation. + /// + public abstract class CustomUserNameValidator : UserNamePasswordValidator + { + /// + /// Overrides to instead validate the username/password against the Configuration DB Users table. + /// + /// User id coming in as UserName credentials from client. + /// Password coming in as UserName credentials from client. + public override void Validate(string userName, string password) + { + //Add custom user name validation if desired here. Will only be activated if binding security is + //set for ClientCredentials = UserName. + } + } + + /// + /// Provides a base class that allows customization of certificate validation. + /// Specifically, enables certificates to be identified specifically based on a list of + /// authorized cert thumbprints. See StockTrader Order Processor Service for an example of + /// use, as this sample component uses it to ensure only clients using the authorized + /// BSLClient certificate are accepted. + /// + public abstract class CustomCertificateValidator : X509CertificateValidator + { + /// + /// Override with a provided method that returns an array + /// of thumbprints as strings. + /// + /// + protected abstract string[] getAllowedThumbprints(); + + public override void Validate(X509Certificate2 certificate) + { + // create chain and set validation options + X509Chain chain = new X509Chain(); + SetValidationSettings(chain); + + // optional check if cert is valid + if (!chain.Build(certificate)) + { + throw new SecurityTokenValidationException("Client certificate is not valid!"); + } + + // check if cert is from our trusted list + if (!isTrusted(chain, getAllowedThumbprints())) + { + throw new SecurityTokenValidationException("Client certificate is not trusted!"); + } + } + + /// + /// The base goes with default settings, you could override this method to change them, however. + /// + /// + protected virtual void SetValidationSettings(X509Chain chain) + { + //override to set customer settings. + } + + /// + /// Determines if the end certificate in a chain is in the list of trusted certs. + /// You could add logic to perform checks across the whole chain if desired. + /// + /// + /// + /// + protected virtual bool isTrusted(X509Chain chain, string[] trustedThumbprints) + { + return CheckThumbprint(chain.ChainElements[0].Certificate, trustedThumbprints); + } + + /// + /// Check if a cert is in the trust list. + /// + /// Cert to check. + /// List of authorized certs' thumbprints + /// + private bool CheckThumbprint(X509Certificate2 certificate, string[] trustedThumbprints) + { + foreach (string thumbprint in trustedThumbprints) + { + if (string.Equals(certificate.Thumbprint, thumbprint, StringComparison.OrdinalIgnoreCase)) + { + return true; + } + } + + return false; + } + + + + } + + +} + Added: incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/Utility.csproj URL: http://svn.apache.org/viewvc/incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/Utility.csproj?rev=728078&view=auto ============================================================================== --- incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/Utility.csproj (added) +++ incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/Utility.csproj Fri Dec 19 09:43:28 2008 @@ -0,0 +1,84 @@ + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {382E6E1C-E430-4F6C-BC41-5D84A3798B02} + Library + Properties + Trade.Utility + Trade.Utility + true + stocktrader.snk + + + + + 2.0 + + + + + + + + + v3.5 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\release\ + TRACE + prompt + 4 + + + + + + 3.5 + + + + + 3.0 + + + 3.0 + + + + + + + + + + + + + + + + copy "$(TargetPath)" ..\..\..\..\SharedLibraries +copy "$(TargetDir)$(TargetName).pdb" ..\..\..\..\SharedLibraries +copy "$(TargetDir)$(TargetName).pdb" ..\..\..\..\SharedLibraries + + \ No newline at end of file Added: incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/stocktrader.snk URL: http://svn.apache.org/viewvc/incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/stocktrader.snk?rev=728078&view=auto ============================================================================== Binary file - no diff available. Propchange: incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderUtility/stocktrader.snk ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderWebAppSolution.sln URL: http://svn.apache.org/viewvc/incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderWebAppSolution.sln?rev=728078&view=auto ============================================================================== --- incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderWebAppSolution.sln (added) +++ incubator/stonehenge/contrib/stocktrader/dotnet/StockTrader/StockTraderWebAppSolution/StockTraderWebAppSolution.sln Fri Dec 19 09:43:28 2008 @@ -0,0 +1,215 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StockTraderWebApplicationServiceClient", "StockTraderWebApplicationClients\StockTraderWebApplicationServiceClient.csproj", "{3A1AB418-60B7-44BF-AE17-E74F425CD5C9}" +EndProject +Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "Trade", "Trade\", "{7550FE25-72BF-4059-8786-08741D8E7154}" + ProjectSection(WebsiteProperties) = preProject + SccProjectName = "Svn" + SccAuxPath = "Svn" + SccLocalPath = "Svn" + SccProvider = "SubversionScc" + TargetFramework = "3.5" + ProjectReferences = "{97F8A696-9918-4DC4-8D6E-9E574B9A4059}|Trade.StockTraderWebApplicationModelClasses.dll;{3A1AB418-60B7-44BF-AE17-E74F425CD5C9}|Trade.StockTraderWebApplicationServiceClient.dll;{D8E1ECD5-2D86-4994-A37B-BF4D24334A2E}|Trade.StockTraderWebApplicationSettings.dll;{382E6E1C-E430-4F6C-BC41-5D84A3798B02}|Trade.Utility.dll;{A4759510-6CE9-4692-B348-B8483BCD1447}|BasicClient.dll;{B28867CC-DD77-4F17-BA01-92625C235F6C}|Trade.OrderProcessorServiceConfigurationSettings.dll;{018CF591-E45C-4E74-B613-CA5C1FCAFE89}|Trade.BusinessServiceImplementation.dll;" + Debug.AspNetCompiler.VirtualPath = "/Trade" + Debug.AspNetCompiler.PhysicalPath = "Trade\" + Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\Trade\" + Debug.AspNetCompiler.Updateable = "true" + Debug.AspNetCompiler.ForceOverwrite = "true" + Debug.AspNetCompiler.FixedNames = "false" + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.VirtualPath = "/Trade" + Release.AspNetCompiler.PhysicalPath = "Trade\" + Release.AspNetCompiler.TargetPath = "PrecompiledWeb\Trade\" + Release.AspNetCompiler.Updateable = "true" + Release.AspNetCompiler.ForceOverwrite = "true" + Release.AspNetCompiler.FixedNames = "false" + Release.AspNetCompiler.Debug = "False" + VWDPort = "52256" + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StockTraderWebApplicationSettings", "ServiceConfigurationSettings\StockTraderWebApplicationSettings.csproj", "{D8E1ECD5-2D86-4994-A37B-BF4D24334A2E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StockTraderWebApplicationModelClasses", "StockTraderWebApplicationUIModelClasses\StockTraderWebApplicationModelClasses.csproj", "{97F8A696-9918-4DC4-8D6E-9E574B9A4059}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BasicClient", "BasicClient\BasicClient.csproj", "{A4759510-6CE9-4692-B348-B8483BCD1447}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BusinessServiceDataContract", "BusinessServiceDataContract\BusinessServiceDataContract.csproj", "{EBB1604B-3F50-4A81-87C3-1AE4029EEEC6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BusinessServiceConfigurationSettings", "BusinessServiceConfigurationSettings\BusinessServiceConfigurationSettings.csproj", "{ED14B721-A6F1-4B65-89FA-18B78345CB5A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BusinessServiceImplementation", "BusinessServiceImplementation\BusinessServiceImplementation.csproj", "{018CF591-E45C-4E74-B613-CA5C1FCAFE89}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OrderProcessorAsyncClient", "OrderProcessorASyncClient\OrderProcessorAsyncClient.csproj", "{623BC346-84FA-4B9E-B043-811DB7FBEC2A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OrderProcessorServiceConfigurationSettings", "OrderProcessorServiceConfigurationSettings\OrderProcessorServiceConfigurationSettings.csproj", "{B28867CC-DD77-4F17-BA01-92625C235F6C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Utility", "StockTraderUtility\Utility.csproj", "{382E6E1C-E430-4F6C-BC41-5D84A3798B02}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BusinessServiceContract", "BusinessServiceContract\BusinessServiceContract.csproj", "{36FA3564-9AF5-496A-805B-6ED262CAAE2B}" +EndProject +Global + GlobalSection(SubversionScc) = preSolution + Svn-Managed = True + Manager = AnkhSVN - Subversion Support for Visual Studio + EndGlobalSection + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|.NET = Debug|.NET + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Release|.NET = Release|.NET + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3A1AB418-60B7-44BF-AE17-E74F425CD5C9}.Debug|.NET.ActiveCfg = Debug|Any CPU + {3A1AB418-60B7-44BF-AE17-E74F425CD5C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3A1AB418-60B7-44BF-AE17-E74F425CD5C9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3A1AB418-60B7-44BF-AE17-E74F425CD5C9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {3A1AB418-60B7-44BF-AE17-E74F425CD5C9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {3A1AB418-60B7-44BF-AE17-E74F425CD5C9}.Release|.NET.ActiveCfg = Release|Any CPU + {3A1AB418-60B7-44BF-AE17-E74F425CD5C9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3A1AB418-60B7-44BF-AE17-E74F425CD5C9}.Release|Any CPU.Build.0 = Release|Any CPU + {3A1AB418-60B7-44BF-AE17-E74F425CD5C9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {3A1AB418-60B7-44BF-AE17-E74F425CD5C9}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {7550FE25-72BF-4059-8786-08741D8E7154}.Debug|.NET.ActiveCfg = Debug|.NET + {7550FE25-72BF-4059-8786-08741D8E7154}.Debug|.NET.Build.0 = Debug|.NET + {7550FE25-72BF-4059-8786-08741D8E7154}.Debug|Any CPU.ActiveCfg = Debug|.NET + {7550FE25-72BF-4059-8786-08741D8E7154}.Debug|Mixed Platforms.ActiveCfg = Debug|.NET + {7550FE25-72BF-4059-8786-08741D8E7154}.Debug|Mixed Platforms.Build.0 = Debug|.NET + {7550FE25-72BF-4059-8786-08741D8E7154}.Release|.NET.ActiveCfg = Debug|.NET + {7550FE25-72BF-4059-8786-08741D8E7154}.Release|.NET.Build.0 = Debug|.NET + {7550FE25-72BF-4059-8786-08741D8E7154}.Release|Any CPU.ActiveCfg = Debug|.NET + {7550FE25-72BF-4059-8786-08741D8E7154}.Release|Mixed Platforms.ActiveCfg = Debug|.NET + {7550FE25-72BF-4059-8786-08741D8E7154}.Release|Mixed Platforms.Build.0 = Debug|.NET + {D8E1ECD5-2D86-4994-A37B-BF4D24334A2E}.Debug|.NET.ActiveCfg = Debug|Any CPU + {D8E1ECD5-2D86-4994-A37B-BF4D24334A2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D8E1ECD5-2D86-4994-A37B-BF4D24334A2E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D8E1ECD5-2D86-4994-A37B-BF4D24334A2E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D8E1ECD5-2D86-4994-A37B-BF4D24334A2E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D8E1ECD5-2D86-4994-A37B-BF4D24334A2E}.Release|.NET.ActiveCfg = Release|Any CPU + {D8E1ECD5-2D86-4994-A37B-BF4D24334A2E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D8E1ECD5-2D86-4994-A37B-BF4D24334A2E}.Release|Any CPU.Build.0 = Release|Any CPU + {D8E1ECD5-2D86-4994-A37B-BF4D24334A2E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D8E1ECD5-2D86-4994-A37B-BF4D24334A2E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {97F8A696-9918-4DC4-8D6E-9E574B9A4059}.Debug|.NET.ActiveCfg = Debug|Any CPU + {97F8A696-9918-4DC4-8D6E-9E574B9A4059}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {97F8A696-9918-4DC4-8D6E-9E574B9A4059}.Debug|Any CPU.Build.0 = Debug|Any CPU + {97F8A696-9918-4DC4-8D6E-9E574B9A4059}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {97F8A696-9918-4DC4-8D6E-9E574B9A4059}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {97F8A696-9918-4DC4-8D6E-9E574B9A4059}.Release|.NET.ActiveCfg = Release|Any CPU + {97F8A696-9918-4DC4-8D6E-9E574B9A4059}.Release|Any CPU.ActiveCfg = Release|Any CPU + {97F8A696-9918-4DC4-8D6E-9E574B9A4059}.Release|Any CPU.Build.0 = Release|Any CPU + {97F8A696-9918-4DC4-8D6E-9E574B9A4059}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {97F8A696-9918-4DC4-8D6E-9E574B9A4059}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {A4759510-6CE9-4692-B348-B8483BCD1447}.Debug|.NET.ActiveCfg = Debug|Any CPU + {A4759510-6CE9-4692-B348-B8483BCD1447}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A4759510-6CE9-4692-B348-B8483BCD1447}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A4759510-6CE9-4692-B348-B8483BCD1447}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {A4759510-6CE9-4692-B348-B8483BCD1447}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {A4759510-6CE9-4692-B348-B8483BCD1447}.Release|.NET.ActiveCfg = Release|Any CPU + {A4759510-6CE9-4692-B348-B8483BCD1447}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A4759510-6CE9-4692-B348-B8483BCD1447}.Release|Any CPU.Build.0 = Release|Any CPU + {A4759510-6CE9-4692-B348-B8483BCD1447}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {A4759510-6CE9-4692-B348-B8483BCD1447}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {EBB1604B-3F50-4A81-87C3-1AE4029EEEC6}.Debug|.NET.ActiveCfg = Debug|Any CPU + {EBB1604B-3F50-4A81-87C3-1AE4029EEEC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EBB1604B-3F50-4A81-87C3-1AE4029EEEC6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EBB1604B-3F50-4A81-87C3-1AE4029EEEC6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {EBB1604B-3F50-4A81-87C3-1AE4029EEEC6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {EBB1604B-3F50-4A81-87C3-1AE4029EEEC6}.Release|.NET.ActiveCfg = Release|Any CPU + {EBB1604B-3F50-4A81-87C3-1AE4029EEEC6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EBB1604B-3F50-4A81-87C3-1AE4029EEEC6}.Release|Any CPU.Build.0 = Release|Any CPU + {EBB1604B-3F50-4A81-87C3-1AE4029EEEC6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {EBB1604B-3F50-4A81-87C3-1AE4029EEEC6}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {ED14B721-A6F1-4B65-89FA-18B78345CB5A}.Debug|.NET.ActiveCfg = Debug|Any CPU + {ED14B721-A6F1-4B65-89FA-18B78345CB5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ED14B721-A6F1-4B65-89FA-18B78345CB5A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ED14B721-A6F1-4B65-89FA-18B78345CB5A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {ED14B721-A6F1-4B65-89FA-18B78345CB5A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {ED14B721-A6F1-4B65-89FA-18B78345CB5A}.Release|.NET.ActiveCfg = Release|Any CPU + {ED14B721-A6F1-4B65-89FA-18B78345CB5A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ED14B721-A6F1-4B65-89FA-18B78345CB5A}.Release|Any CPU.Build.0 = Release|Any CPU + {ED14B721-A6F1-4B65-89FA-18B78345CB5A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {ED14B721-A6F1-4B65-89FA-18B78345CB5A}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {018CF591-E45C-4E74-B613-CA5C1FCAFE89}.Debug|.NET.ActiveCfg = Debug|Any CPU + {018CF591-E45C-4E74-B613-CA5C1FCAFE89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {018CF591-E45C-4E74-B613-CA5C1FCAFE89}.Debug|Any CPU.Build.0 = Debug|Any CPU + {018CF591-E45C-4E74-B613-CA5C1FCAFE89}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {018CF591-E45C-4E74-B613-CA5C1FCAFE89}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {018CF591-E45C-4E74-B613-CA5C1FCAFE89}.Release|.NET.ActiveCfg = Release|Any CPU + {018CF591-E45C-4E74-B613-CA5C1FCAFE89}.Release|Any CPU.ActiveCfg = Release|Any CPU + {018CF591-E45C-4E74-B613-CA5C1FCAFE89}.Release|Any CPU.Build.0 = Release|Any CPU + {018CF591-E45C-4E74-B613-CA5C1FCAFE89}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {018CF591-E45C-4E74-B613-CA5C1FCAFE89}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {623BC346-84FA-4B9E-B043-811DB7FBEC2A}.Debug|.NET.ActiveCfg = Debug|Any CPU + {623BC346-84FA-4B9E-B043-811DB7FBEC2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {623BC346-84FA-4B9E-B043-811DB7FBEC2A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {623BC346-84FA-4B9E-B043-811DB7FBEC2A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {623BC346-84FA-4B9E-B043-811DB7FBEC2A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {623BC346-84FA-4B9E-B043-811DB7FBEC2A}.Release|.NET.ActiveCfg = Release|Any CPU + {623BC346-84FA-4B9E-B043-811DB7FBEC2A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {623BC346-84FA-4B9E-B043-811DB7FBEC2A}.Release|Any CPU.Build.0 = Release|Any CPU + {623BC346-84FA-4B9E-B043-811DB7FBEC2A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {623BC346-84FA-4B9E-B043-811DB7FBEC2A}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {B28867CC-DD77-4F17-BA01-92625C235F6C}.Debug|.NET.ActiveCfg = Debug|Any CPU + {B28867CC-DD77-4F17-BA01-92625C235F6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B28867CC-DD77-4F17-BA01-92625C235F6C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B28867CC-DD77-4F17-BA01-92625C235F6C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {B28867CC-DD77-4F17-BA01-92625C235F6C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {B28867CC-DD77-4F17-BA01-92625C235F6C}.Release|.NET.ActiveCfg = Release|Any CPU + {B28867CC-DD77-4F17-BA01-92625C235F6C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B28867CC-DD77-4F17-BA01-92625C235F6C}.Release|Any CPU.Build.0 = Release|Any CPU + {B28867CC-DD77-4F17-BA01-92625C235F6C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {B28867CC-DD77-4F17-BA01-92625C235F6C}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {382E6E1C-E430-4F6C-BC41-5D84A3798B02}.Debug|.NET.ActiveCfg = Debug|Any CPU + {382E6E1C-E430-4F6C-BC41-5D84A3798B02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {382E6E1C-E430-4F6C-BC41-5D84A3798B02}.Debug|Any CPU.Build.0 = Debug|Any CPU + {382E6E1C-E430-4F6C-BC41-5D84A3798B02}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {382E6E1C-E430-4F6C-BC41-5D84A3798B02}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {382E6E1C-E430-4F6C-BC41-5D84A3798B02}.Release|.NET.ActiveCfg = Release|Any CPU + {382E6E1C-E430-4F6C-BC41-5D84A3798B02}.Release|Any CPU.ActiveCfg = Release|Any CPU + {382E6E1C-E430-4F6C-BC41-5D84A3798B02}.Release|Any CPU.Build.0 = Release|Any CPU + {382E6E1C-E430-4F6C-BC41-5D84A3798B02}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {382E6E1C-E430-4F6C-BC41-5D84A3798B02}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {36FA3564-9AF5-496A-805B-6ED262CAAE2B}.Debug|.NET.ActiveCfg = Debug|Any CPU + {36FA3564-9AF5-496A-805B-6ED262CAAE2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36FA3564-9AF5-496A-805B-6ED262CAAE2B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36FA3564-9AF5-496A-805B-6ED262CAAE2B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {36FA3564-9AF5-496A-805B-6ED262CAAE2B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {36FA3564-9AF5-496A-805B-6ED262CAAE2B}.Release|.NET.ActiveCfg = Release|Any CPU + {36FA3564-9AF5-496A-805B-6ED262CAAE2B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36FA3564-9AF5-496A-805B-6ED262CAAE2B}.Release|Any CPU.Build.0 = Release|Any CPU + {36FA3564-9AF5-496A-805B-6ED262CAAE2B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {36FA3564-9AF5-496A-805B-6ED262CAAE2B}.Release|Mixed Platforms.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(TeamFoundationVersionControl) = preSolution + SccNumberOfProjects = 7 + SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} + SccTeamFoundationServer = http://tkbgitvstfat10.redmond.corp.microsoft.com:8080/ + SccProjectUniqueName0 = ..\\StockTraderBusinessService\\StockTraderUtility\\Utility.csproj + SccProjectName0 = ../StockTraderBusinessService/StockTraderUtility + SccLocalPath0 = ..\\StockTraderBusinessService\\StockTraderUtility + SccLocalPath1 = . + SccProjectUniqueName2 = ServiceConfigurationSettings\\StockTraderWebApplicationSettings.csproj + SccProjectName2 = ServiceConfigurationSettings + SccLocalPath2 = ServiceConfigurationSettings + SccProjectUniqueName3 = StockTraderWebApplicationClients\\StockTraderWebApplicationServiceClient.csproj + SccProjectName3 = StockTraderWebApplicationClients + SccLocalPath3 = StockTraderWebApplicationClients + SccProjectUniqueName4 = StockTraderWebApplicationConfigurationImplementation\\StockTraderWebApplicationConfigurationImplementation.csproj + SccProjectName4 = StockTraderWebApplicationConfigurationImplementation + SccLocalPath4 = StockTraderWebApplicationConfigurationImplementation + SccProjectUniqueName5 = StockTraderWebApplicationUIModelClasses\\StockTraderWebApplicationModelClasses.csproj + SccProjectName5 = StockTraderWebApplicationUIModelClasses + SccLocalPath5 = StockTraderWebApplicationUIModelClasses + SccWebProject6 = true + SccProjectUniqueName6 = Trade + SccLocalPath6 = . + SccProjectFilePathRelativizedFromConnection6 = Trade\\ + SccProjectEnlistmentChoice6 = 2 + EndGlobalSection +EndGlobal