WCF错误 - 无法获取服务端点

我最近开始使用WCF,我遇到了一个问题,我只是没有线索如何解决。 我使用服务主机启动WCF服务,但是当我在浏览器中使用URI时,它不显示服务的合同,当我尝试使用ChannelFactory连接到它时,它会发出异常。WCF错误 - 无法获取服务端点

我在Visual Studio 2017中创建了项目,并没有对配置文件做任何事情,excpet改变了基地址。服务接口和实现都在根项目“文件夹”中,我试过禁用防火墙甚至是防病毒,但似乎没有任何效果。

的App.config:

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

<configuration>

<startup>

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />

</startup>

<system.serviceModel>

<behaviors>

<serviceBehaviors>

<behavior name="">

<serviceMetadata httpGetEnabled="true" />

<serviceDebug includeExceptionDetailInFaults="false" />

</behavior>

</serviceBehaviors>

</behaviors>

<services>

<service name="TaskExecutor.Exec">

<endpoint address="" binding="basicHttpBinding" contract="TaskExecutor.IExec">

<identity>

<dns value="localhost" />

</identity>

</endpoint>

<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

<host>

<baseAddresses>

<add baseAddress="http://localhost:8001/TaskExecutor/Exec/" />

</baseAddresses>

</host>

</service>

</services>

</system.serviceModel>

</configuration>

服务接口:

namespace TaskExecutor 

{

[ServiceContract]

public interface IExec

{

[OperationContract]

void DoWork();

}

}

服务实现:

namespace TaskExecutor 

{

public class Exec : IExec

{

public void DoWork()

{

Console.WriteLine("Doing work.");

}

}

}

计划推出的服务:

using (ServiceHost host = new ServiceHost(typeof(Exec))) 

{

host.Open();

Console.WriteLine("exec service started at {0}", host.BaseAddresses[0]);

}

Console.WriteLine("Press any key to end...");

Console.ReadLine();

启动程序显示的消息后:

exec service started at http://localhost:8001/TaskExecutor/Exec/ 

Press any key to end...

服务客户端代码如下:

EndpointAddress endpoint = new EndpointAddress("http://localhost:8001/TaskExecutor/Exec/"); 

BasicHttpBinding binding = new BasicHttpBinding();

ChannelFactory<IExec> channelFactory = new ChannelFactory<IExec>(binding, endpoint);

IExec proxy = channelFactory.CreateChannel();

proxy.DoWork();

而且它提供了异常:

System.ServiceModel.EndpointNotFoundException occurred 

HResult=0x80131501

Message=There was no endpoint listening at http://localhost:8001/TaskExecutor/Exec/ that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.

Inner Exception 1:

WebException: Unable to connect to the remote server

Inner Exception 2:

SocketException: No connection could be made because the target machine actively refused it

我认真地穿上”不知道该怎么做,任何帮助都会很棒。

非常感谢!

回答:

您已经公开了元数据,但没有将其绑定到服务。以下是您需要的。

<behaviors> 

<serviceBehaviors>

<behavior name="metadadiscovery">

<serviceMetadata httpGetEnabled="true" />

<serviceDebug includeExceptionDetailInFaults="false" />

</behavior>

</serviceBehaviors>

</behaviors>

现在将行为绑定到服务。

<services> 

<service name="TaskExecutor.Exec" behaviorConfiguration="metadadiscovery">

<endpoint address="" binding="basicHttpBinding" contract="TaskExecutor.IExec">

<identity>

<dns value="localhost" />

</identity>

</endpoint>

<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

<host>

<baseAddresses>

<add baseAddress="http://localhost:8001/TaskExecutor/Exec/" />

</baseAddresses>

</host>

</service>

</services>

现在,当您在浏览器中输入地址时,您应该能够看到wsdl。 http://localhost:8001/TaskExecutor/Exec/

回答:

所以我想通了什么是错的,这是开始服务的代码。而不是我有什么它应该是:

using (ServiceHost host = new ServiceHost(typeof(Exec))) 

{

host.Open();

Console.WriteLine("exec service started at {0}", host.BaseAddresses[0]);

Console.WriteLine("Press any key to end...");

Console.ReadLine();

}

以上是 WCF错误 - 无法获取服务端点 的全部内容, 来源链接: utcz.com/qa/259161.html

回到顶部