简单的Wcf服务不会导致端点异常

本文关键字:端点 异常 Wcf 服务 简单 | 更新日期: 2023-09-27 18:07:15

我正在学习wcf,我试图创建一个wcf服务,但我一直得到这个异常:

未处理异常:System.ServiceModel.EndpointNotFoundException: There was no在http://localhost:8733/Person/侦听可以接受消息的端点通用电气。这通常是由不正确的地址或SOAP操作引起的。看到InnerExcept如果有的话,请参阅更多细节。--> system.net.webeexception: cannot to conne--> System.Net.Sockets.SocketException: No connection因为目标机器主动拒绝了它127.0.0.1:8733

我首先创建了一个WCF服务库。我在这里定义了我的服务契约和数据契约。并配置端点如下所示:

<service name="SelfHosting.PersonContract">
    <endpoint address="" binding="basicHttpBinding" contract="SelfHosting.IPersonContract">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8733/Person/" />
      </baseAddresses>
    </host>
  </service>

这两个端点已经添加,我只是根据需要配置它们。我不确定mex端点是用来做什么的,所以我希望有人能告诉我。

然后,我创建了一个控制台应用程序,并添加了对该服务的引用。我已经初始化了服务的一个实例,然后我尝试调用它:
static PersonContractClient client = new PersonContractClient();
static void Main(string[] args)
{
        var persons = client.GetPersons();
        foreach (var personData in persons)
        {
            Console.WriteLine(personData.Name);
            Console.WriteLine(personData.Email);
        }
    }

我没有在客户端上设置任何端点,因为据我所知,当您向服务添加引用时,它们会自动添加。这是在我添加引用后添加的:

 <endpoint address="http://localhost:8733/Person/" binding="basicHttpBinding"
            bindingConfiguration="BasicHttpBinding_IPersonContract" contract="PersonNamespace.IPersonContract"
            name="BasicHttpBinding_IPersonContract" />

我的解决方案还包含另一个具有数据的项目,我使用实体框架获得数据。我不知道这是否与问题有关。

我在这里做错了什么?

简单的Wcf服务不会导致端点异常

当我尝试在控制台应用程序中使用self host创建双工wcf通信时,我遇到了类似的问题。下面这个例子http://adamprescott.net/2012/08/15/a-simple-wcf-service-callback-example/说明得很清楚。通常会得到错误

"未处理的异常:System.ServiceModel.EndpointNotFoundException:没有端点监听http://localhost:8733/Person/可以接受这个消息。这通常是由不正确的地址或SOAP操作引起的。有关详细信息,请参阅InnerExcept离子(如果存在)。--> System.Net.Sockets.SocketException: No connection c could be made因为目标机器主动拒绝它127.0.0.1:8733"

在尝试在客户端控制台应用程序中发现服务引用之前,您需要通过右键单击文件夹位置中的.exe来启动服务的可执行文件(.exe)>复制服务app.config中baseaddress中的uri并粘贴在添加服务引用对话框中,然后单击确定…这就解决了问题。我希望这对其他人有帮助,因为这个问题有点老了。

用终端的ip地址代替url中的'localhost'