Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot start wcf service host

I'm trying to create a service host for my WCF application. When I start the app I get an error saying

The service cannot be started. This service has no endpoint defined. Please add at least one endpoint for the service in config file and try again.

I followed the tutorial on PluralSight and this is the code I came up with

using System.ServiceModel;
using FreedomService;

namespace ConsoleHost
{
    class Program
    {
        static void Main(string[] args)
        {
            var host = new ServiceHost(typeof(PeopleService));
            host.AddServiceEndpoint(typeof (IPeopleService), new BasicHttpBinding(),
                                    "http://localhost:8080/people/basic");
            host.AddServiceEndpoint(typeof(IPeopleService), new WSHttpBinding(), 
                                    "http://localhost:8080/people/ws");
            host.AddServiceEndpoint(typeof(IPeopleService), new NetTcpBinding(), 
                                    "net.tcp://localhost:8081/people");
            try
            {
                host.Open();
                PrintServiceInfo(host);
                Console.ReadLine();
                host.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                host.Abort();
            }
        }

        static void PrintServiceInfo(ServiceHost host)
        {
            Console.WriteLine("{0} is up and running with these endpoints:",host.Description.ServiceType);
            foreach (var endpoint in host.Description.Endpoints)
            {
                Console.WriteLine(endpoint.Address);
            }
        }

    }
}

IPeopleService.cs

[ServiceContract]
public interface IPeopleService
{
    [OperationContract]
    string GetData(int value);

    [OperationContract]
    PersonType GetPersonById(int id);
}

PeopleService.cs

public class PeopleService : IPeopleService, IDisposable
    {
        private ICollection<PersonType> People = new Collection<PersonType>
            {
                //...
            };
        public string GetData(int value)
        {
            return string.Format("You entered: {0}", value);
        }

        public PersonType GetPersonById(int id)
        {
            var person = People.First(p => p.Id == id);
            if (person!= null)
                return person;
            throw new InvalidDataException(string.Format("No Person with the id: {0} found.",id));
        }

        public void Dispose()
        {
            this.People = null;
        }
    }

app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

servicelibrary's app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" />
  </system.web>
  <!-- When deploying the service library project, the content of the config file must be added to the host's 
  app.config file. System.Configuration does not support config files for libraries. -->
  <system.serviceModel>
    <services>
      <service name="FreedomService.PeopleService">
        <host>
          <baseAddresses>
            <add baseAddress = "http://localhost:8733/Design_Time_Addresses/FreedomService/basic/" />
          </baseAddresses>
        </host>
        <!-- Service Endpoints -->
        <!-- Unless fully qualified, address is relative to base address supplied above -->
        <endpoint address="" binding="basicHttpBinding" contract="FreedomService.IPeopleService">
          <!-- 
              Upon deployment, the following identity element should be removed or replaced to reflect the 
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
              automatically.
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <!-- Metadata Endpoints -->
        <!-- The Metadata Exchange endpoint is used by the service to describe itself to clients. --> 
        <!-- This endpoint does not use a secure binding and should be secured or removed before deployment -->
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, 
          set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/>
          <!-- To receive exception details in faults for debugging purposes, 
          set the value below to true.  Set to false before deployment 
          to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
like image 597
Antarr Byrd Avatar asked Jun 07 '13 17:06

Antarr Byrd


People also ask

How do I open WCF service host in Visual Studio?

When you initially invoke WCF Service Host (by pressing F5 inside Visual Studio), the WCF Service Host window automatically opens. When WCF Service Host is running, the program's icon appears in the notification area.

How do I Turn Off WCF service host?

The WCF Service Host main window contains two menus: File: Contains the Close and Exit commands. When you click Close, the WCF Service Host dialog box closes, but the services continue to be hosted. When you click Exit, WCF Service Host is also shut down. This also stops all hosted services.

What to do when errors occur during WCF service host?

When errors occur during service hosting, WCF Service Host dialog box will open to display relevant information. The WCF Service Host main window contains two menus: File: Contains the Close and Exit commands. When you click Close, the WCF Service Host dialog box closes, but the services continue to be hosted.

How to debug a self-hosted WCF service?

The easiest way to debug a self-hosted WCF is to configure Visual Studio to launch both client and server when you choose Start Debugging on the Debug menu. If the WCF service is self-hosting inside or a process that cannot be launched in this manner, such as NT service, you cannot use this method. Instead, you can do one of the following:


1 Answers

tl;dr; Fix name in App.config

For me, this problem was triggered by ReSharper: I renamed the service and it had not renamed it everywhere.

Go into App.config to correct the service and interface names to fix the issue.

like image 116
Ruskin Avatar answered Sep 23 '22 06:09

Ruskin