Using XAG to Create a WCF Service
Here's a good example of what you could use XAG for. Using XAG, the below XML document compiles to a WCF Service Project. It contains an interface, a class implementing the interface, a few data contracts, and all appropriate references.
As you can see, you can include a literal configuration in the XML structure. This will be included as an app.config in your project.
What is XAG? XAG is a new FREE .NET 2.0/3.0 architecture and development tool allowing the creation of entire VS2005 projects in a single XML structure. You can access XAG at http://www.jampadtechnology.com/xag/
<Assembly xmlns:x="http://www.jampadtechnology.com/xag/2006/11/"> <References> <Reference Name="System.Runtime.Serialization " /> <Reference Name="System.ServiceModel" /> </References> <Folder Header="Data Contracts"> <Person x:Key="Person" Type="Class" AutoGenerateConstructorsByProperties="True" AccessModifier="Public" Namespace="AcmeCorp.Sales "> <Attributes> <Attribute Type="DataContract" Namespace="System.Runtime.Serialization" /> </Attributes> <Properties> <FirstName Type="String" /> <LastName Type="String" /> <Address1 Type="String" /> <Address2 Type="String" /> <City Type="String" /> <State Type="String" /> <PostalCode Type="String" /> </Properties> </Person> <CreditCard x:Key="CreditCard" Type="Class" AccessModifier="Public" Namespace="AcmeCorp.Sales"> <Attributes> <Attribute Type="DataContract" Namespace="System.Runtime.Serialization" /> </Attributes> <Properties> <Number Type="String" /> <Cvv2 Type="String" /> <Name Type="String" /> <ExpDate Type="String" /> </Properties> </CreditCard> <Item x:Key="Item" Type="Class" AccessModifier="Public" Namespace="AcmeCorp.Sales"> <Attributes> <Attribute Type="DataContract" Namespace="System.Runtime.Serialization" /> </Attributes> <Properties> <ItemCode Type="String" /> <Name Type="String" /> <Price Type="Decimal" /> </Properties> </Item> <Cart x:Key="Cart" Type="Class" AccessModifier="Public" Namespace="AcmeCorp.Sales "> <Attributes> <Attribute Type="DataContract" Namespace="System.Runtime.Serialization" /> </Attributes> <Aliases> <Alias x:Key="LineItemsCollection" Name="LineItemsCollection" Type="System.Collections.ObjectModel.Collection [{Type Item}]" /> </Aliases> <Properties> <LineItems Type="{Type LineItemsCollection}" /> </Properties> </Cart> <Sale x:Key="Sale" Type="Class" AccessModifier="Public" Namespace="AcmeCorp.Sales"> <Attributes> <Attribute Type="DataContract" Namespace="System.Runtime.Serialization " /> </Attributes> <Properties> <Person AccessModifier="Public" Type="{Type Person}" InstantiateObject="True" /> <CreditCard AccessModifier="Public" Type="{Type CreditCard}" /> <Cart AccessModifier="Public" Type="{Type Cart}" /> </Properties> </Sale> </Folder> <Folder Header="Services"> <IProcessorService x:Key="IProcessorService" Type="Interface" AccessModifier="Public" Namespace="AcmeCorp.ServiceContracts"> <Attributes> <Attribute Type="ServiceContract" Namespace="System.ServiceModel" Reference="System.ServiceModel" /> </Attributes> <Methods> <ProcessSale ReturnType="Void"> <Attributes> <Attribute Type="OperationContract" Namespace="System.ServiceModel" /> </Attributes> <Parameters> <Parameter Name="sale" Type="{Type Sale}" /> </Parameters> </ProcessSale> </Methods> </IProcessorService> <ProcessorService Type="Class" AccessModifier="Public" Namespace="AcmeCorp.Service"> <Implements> <Interface Name="{Type IProcessorService}" Namespace="System" /> </Implements> </ProcessorService> </Folder> <Configuration> <!-- // Sample Console Application using System; using System.ServiceModel; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { using (ServiceHost service = new ServiceHost(typeof(AcmeCorp.Service.ProcessorService))) { service.Open( ); Console.WriteLine("Listening..."); Console.ReadLine( ); } } } } --> <system.serviceModel> <services> <service name="AcmeCorp.Service.ProcessorService" behaviorConfiguration="Service1Behavior"> <host> <baseAddresses> <add baseAddress="http://localhost:3827/"/> <add baseAddress="net.pipe://localhost/"/> </baseAddresses> </host> <endpoint address="" contract="AcmeCorp.ServiceContracts.IProcessorService" binding="netNamedPipeBinding"/> <endpoint address="mex" contract="IMetadataExchange" binding="mexHttpBinding"/> </service> </services> <behaviors> <serviceBehaviors> <behavior name="Service1Behavior"> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="true"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </Configuration> </Assembly>