【问题标题】:WCF - "There was no endpoint listening at..." errorWCF - “没有端点正在监听...”错误
【发布时间】:2011-07-24 17:28:18
【问题描述】:

我有两个应用程序要在同一台机器上进行本地测试。应用程序 1 有一个简单的 WCF 服务,具有以下配置条目:

<service behaviorConfiguration="MyNamespace.ContainerManagementServiceBehavior"
        name="MyNamespace.ContainerManagementService">
  <endpoint address="ContainerManagementService" binding="basicHttpBinding"
     name="ContainerManagementbasicHttpEndpoint"
     contract="MyNamespace.IContainer" />
  <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  <host>
    <baseAddresses>
      <add baseAddress="http://localhost:8000/ContainerManagementService" />
    </baseAddresses>
  </host>
</service>    
<behaviors>      
  <behavior name="MyNamespace.ContainerManagementServiceBehavior">
    <serviceMetadata httpGetEnabled="true" />
    <serviceDebug includeExceptionDetailInFaults="false" />
  </behavior>
</behaviors>

我通过运行托管它的 Web 应用程序项目来启动该服务。我能够成功浏览到 url 并从 ie 获取 web 服务信息页面。我复制相同的 URL 并将其用于我的客户。

我的另一个客户端 App 2 在其配置文件中有以下内容:

<system.serviceModel>
  <bindings>
    <basicHttpBinding>
      <binding name="basicHttp" closeTimeout="00:10:00"
        openTimeout="00:10:00" receiveTimeout="00:10:00"
        sendTimeout="00:10:00" allowCookies="false"
        bypassProxyOnLocal="false"
        hostNameComparisonMode="StrongWildcard"
        maxBufferSize="5242880" maxBufferPoolSize="524288"
        maxReceivedMessageSize="5242880" messageEncoding="Text"
        textEncoding="utf-8" transferMode="Buffered"
        useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="8192"
          maxArrayLength="16384"
          maxBytesPerRead="4096" maxNameTableCharCount="5242880" />
        <security mode="None">
          <transport clientCredentialType="None"
            proxyCredentialType="None" realm="" />
          <message clientCredentialType="UserName" algorithmSuite="Default" />
        </security>
      </binding>
    </basicHttpBinding>
  </bindings>
  <client>
    <endpoint
      address="http://localhost:3227/Services/ContainerManagementService.svc"
      binding="basicHttpBinding" bindingConfiguration="basicHttp"
      contract="MyService.IService" name="externalService" />      
  </client>
</system.serviceModel>

但是,当我尝试对正在运行的服务执行 WCF 调用表单客户端时,我收到以下错误消息:

There was no endpoint listening at
http://localhost:3227/Services/ContainerManagementService.svc
that could accept the message. This is often caused by an incorrect
address or SOAP action. See InnerException, if present, for more details.

会发生什么?

【问题讨论】:

    标签: wcf


    【解决方案1】:

    看起来问题是由于服务器和客户端都是从 Cassini 服务器运行的。我正在更改架构以在 IIS 中托管服务器端点。

    【讨论】:

      【解决方案2】:

      您有两个应用程序吗?

      一个托管服务器端点,另一个托管客户端?两者都在 IIS 中处于活动状态(考虑到第二个应用程序是 Web 应用程序)?

      如果您的解决方案中有这两个组件的两个项目,您可以将 VS 配置为同时启动这两个项目。这样,您可以在客户端和服务器上都设置断点,并查看服务器是否真的被客户端调用,或者是否在没有调用服务器方法的情况下发生异常。

      【讨论】:

      • 我有两种单独的解决方案,一种用于服务器,一种用于客户端。解决方案同时运行。服务器在 IIS 中处于活动状态。
      • 如果您在 svc.cs 的方法中放置断点,该断点会被命中还是从未调用过?编辑:由于客户端和服务器都在您的机器上,如果客户端和服务器都在同一个解决方案中,您可以让它们从同一个 VS 调试会话开始。如果不是,您可以为测试目的制定解决方案。
      【解决方案3】:

      如果您的网络服务已开启:http://localhost:8000/ContainerManagementService.svc

      您的客户端 app2 应该指向相同的地址:

      <client>
            <endpoint address="http://localhost:8000/ContainerManagementService.svc"
              binding="basicHttpBinding" bindingConfiguration="basicHttp"
              contract="MyService.IService" name="externalService" />      
      </client>
      

      【讨论】:

      • 他很可能托管在 IIS 中,因此 IIS 将根据 *.svc 文件所在的位置指定 URL
      • 它不在localhost:8000/ContainerManagementService.svc 上,这让我想到了另一个问题:在我的场景中似乎忽略了 元素。为什么?它在哪里使用?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多