WCF Rest服务在IIS 8中不能通过HTTP工作

时间:2014-01-14 23:22:48

标签: wcf wcf-binding iis-8

我的团队有一个用.NET 4.0编写的小型WCF Rest服务。从历史上看,它已部署在运行IIS 7的Server 2008计算机上,使用以下绑定配置:

<bindings>
  <webHttpBinding>
    <binding name="httpsBinding">
      <security mode="Transport"/>
    </binding>
  </webHttpBinding>
</bindings>

正如人们所料,只要Web服务器配置了每个服务器的绑定,该服务就可以正常使用HTTP或HTTPS。

但是,当我们在运行IIS 8的Server 2012盒子上安装该服务时,该服务将通过HTTPS正常工作,但是基于HTTP的请求将失败并显示404状态。

我们已经查看了Server 2008和Server 2012计算机的IIS配置,但没有什么能够成为明显的罪魁祸首。所有设置看起来都是一样的。

是否需要在IIS或Web配置中进行任何额外配置?在SO和MSDN上有很多关于使用HTTP而不是HTTPS的服务的问题,但是我没有看到相反的情况。

修改

根据WCF跟踪日志,2008计算机在HTTP和HTTPS上打开端点侦听器,而2012计算机仅打开HTTPS的端点侦听器。

为了确保我没有遗漏服务本身的任何内容,我在两台机器上都安装了相同的MSI,甚至在2008年的盒子上覆盖了web.config和2008年的盒子(尽管它们应该有反正是完全相同的)。行为没有变化。

编辑2:

以下是完整的web.config:

<?xml version="1.0"?>
<configuration>
  <appSettings/>
  <connectionStrings/>
  <system.web>
    <!--
            The <authentication> section enables configuration 
            of the security authentication mode used by 
            ASP.NET to identify an incoming user. 
        -->
    <authentication mode="None"/>
    <compilation targetFramework="4.0"/>
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
  </system.web>
  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <services>
      <service name="service1">
        <endpoint behaviorConfiguration="webHttp" binding="webHttpBinding" bindingConfiguration="httpsBinding" contract="service1"/>
      </service>
      <service name="service2">
        <endpoint behaviorConfiguration="webHttp" binding="webHttpBinding" bindingConfiguration="httpsBinding" contract="service2"/>
      </service>
      <service name="service3">
        <endpoint behaviorConfiguration="webHttp" binding="webHttpBinding" bindingConfiguration="httpsBinding" contract="service3"/>
      </service>
    </services>
    <bindings>
      <webHttpBinding>
        <binding name="httpsBinding">
          <security mode="Transport"/>
        </binding>
      </webHttpBinding>
    </bindings>
    <behaviors>
      <endpointBehaviors>
        <behavior name="webHttp">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

1 个答案:

答案 0 :(得分:1)

为每个服务添加一个HTTP端点,如下所示:

<endpoint behaviorConfiguration="webHttp" binding="webHttpBinding" bindingConfiguration="httpBinding" contract="service3"/>

仅限HTTP的关联绑定:

<binding name="httpBinding">
    <security mode="None"/>
</binding>