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>
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.
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.
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.
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:
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With