c# – 无法启动wcf服务主机

我正在尝试为我的WCF应用程序创建服务主机.当我启动应用程序时,我收到错误消息

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.

我按照PluralSight上的教程进行操作,这是我提出的代码

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的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 @R_773_4045@ion,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 @R_773_4045@ion -->
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

解决方法

TL;博士;修复App.config中的名称

对我来说,这个问题是由ReSharper触发的:我重命名了这个服务,并没有在任何地方重命名它.

进入App.config以更正服务和接口名称解决问题.

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...