2

我正在尝试通过在Anthony Steele 的博客文章中重新创建项目来学习如何使用 WCF 构建 RESTful 服务。他在他的配置中使用以下 XML 来设置服务的端点。

    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8080/greeter"/>
      </baseAddresses>
    </host>

但是,当我尝试在我的 ASP.NET 3.5 网站的 web.config 中做同样的事情时,我无法导航到我的服务。这是我正在使用的 XML:

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="GreeterBehavior">
        <serviceMetadata httpGetEnabled="true"/>
        <serviceDebug includeExceptionDetailInFaults="false"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <services>
    <service behaviorConfiguration="GreeterBehavior" name="Greeter">
      <host>
        <baseAddresses>
          <add baseAddress="http://localhost:49268/TestREST/webapi/services/greeter"/>
        </baseAddresses>
      </host>
      <endpoint address="" binding="wsHttpBinding" contract="IGreeter">
        <identity>
          <dns value="localhost"/>
        </identity>
      </endpoint>
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    </service>
  </services>
</system.serviceModel>

我想我的配置将允许我导航到http://localhost:49268/TestREST/webapi/services/greeter并查看我的服务。我得到的只是一条找不到资源的消息——我错过了什么吗?

编辑:我的部分问题是我的绑定是 wsHttpBinding。使用 webHttpBinding 可以让我正确使用该服务 - 除了 baseAddress 配置部分仍然无效。

4

1 回答 1

4

我的预感是服务端点没有成功创建。

在服务“名称”属性中,您不包括服务类型的 FQN(完全限定名称)。其次,在端点“合同”属性中,您也没有将 FQN 包含到合同类型中。

另一方面,这可能是一个端口问题。为了确保这一点,请尝试运行 Visual Studio 2008 发行版中包含的 WcfTestClient.exe。如果您可以连接到http://localhost:49268/TestREST/webapi/services/greeter/mex,那么您知道这不是端口问题。

假设您可以通过 MEX 连接,然后尝试执行一些方法,这些方法可能会映射到http://localhost:49268/TestREST/webapi/services/greeter

如果您在服务器上操作,请在此处查看有关 HttpCfg.exe 的一些有价值的详细信息: WCF ServiceHost basicHttpBinding 503 error

如果您需要有关 WcfTestClient 的更多详细信息,请在此处查找它们: Is it possible to make the WcfTestClient work for custom transport channels?

以防万一:逐字复制示例并验证它是否按定义工作,包括配置文件,然后再对其进行最轻微的偏离。

于 2009-02-12T16:03:38.383 回答