title: WCF Self Host Service - Endpoints in C#
body: <p>My first few attempts at creating a self hosted service. Trying to make something up which will accept a query string and return some text but have have a few issues:</p>
  
  <ul>
  <li><p>All the documentation talks about endpoints being created automatically for each base address if they are not found in a config file. This doesn't seem to be the case for me, I get the "Service has zero application endpoints..." exception. Manually specifying a base endpoint as below seems to resolve this:</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  using System.ServiceModel;
  using System.ServiceModel.Description;
  
  namespace TestService
  {
      [ServiceContract]
      public interface IHelloWorldService
      {
         [OperationContract]
         string SayHello(string name);
      }
  
      public class HelloWorldService : IHelloWorldService
      {
          public string SayHello(string name)
          {
             return string.Format("Hello, {0}", name);
          }
      }
  
      class Program
      {
          static void Main(string[] args)
          {
              string baseaddr = "http://localhost:8080/HelloWorldService/";
              Uri baseAddress = new Uri(baseaddr);
  
              // Create the ServiceHost.
              using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
              {
                  // Enable metadata publishing.
                  ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                  smb.HttpGetEnabled = true;
                  smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
                  host.Description.Behaviors.Add(smb);
  
                  host.AddServiceEndpoint(typeof(IHelloWorldService), new BasicHttpBinding(), baseaddr);
                  host.AddServiceEndpoint(typeof(IHelloWorldService), new BasicHttpBinding(), baseaddr + "SayHello");
  
                  //for some reason a default endpoint does not get created here
                  host.Open();
  
                  Console.WriteLine("The service is ready at {0}", baseAddress);
                  Console.WriteLine("Press &lt;Enter&gt; to stop the service.");
                  Console.ReadLine();
  
                  // Close the ServiceHost.
                  host.Close();
              }
           }
       }
  }
  </code></pre></li>
  <li><p>How would I go about setting this up to return the value of name in SayHello(string name) when requested thusly: localhost:8080/HelloWorldService/SayHello?name=kyle</p></li>
  </ul>
  
  <p>I'm trying to walk before running, but this just seems like crawling...</p>