我正在尝试为我的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 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>