为什么我的WCF服务不响应web.config中的baseAddress设置?

时间:2009-02-12 15:20:16

标签: wcf rest asp.net-3.5 endpoint base-address

我正在尝试通过Anthony Steele在this blog post上重新创建项目来学习如何使用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配置部分仍然无效。

1 个答案:

答案 0 :(得分: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?

以防万一:逐字复制样本并验证它是否按规定运行,包括配置文件,然后再稍微偏离它。