我的团队有一个用.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>
答案 0 :(得分:1)
为每个服务添加一个HTTP端点,如下所示:
<endpoint behaviorConfiguration="webHttp" binding="webHttpBinding" bindingConfiguration="httpBinding" contract="service3"/>
仅限HTTP的关联绑定:
<binding name="httpBinding">
<security mode="None"/>
</binding>