gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:22:58 85 4
gpt4 key购买 nike

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

应用程序配置

<?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>

最佳答案

tl;dr; 修复 App.config

中的名称

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

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

关于c# - 无法启动 wcf 服务主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16989788/

85 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com