我的團隊有一個用.NET 4.0編寫的小型WCF Rest服務。從歷史上看,它已被部署在Server 2008臺的計算機上運行IIS 7,使用下面的綁定配置:WCF Rest服務無法通過IIS中的HTTP工作8
<bindings>
<webHttpBinding>
<binding name="httpsBinding">
<security mode="Transport"/>
</binding>
</webHttpBinding>
</bindings>
正如人們所預料的,服務的工作只是HTTP或HTTPS,只要Web服務器配置罰款與每個綁定。
但是,當我們在運行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,甚至在2012年盒子上覆蓋了web.config和2008年盒子上的web.config(儘管它們應該反正都一樣)。行爲沒有變化。
編輯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>
您只會向我們展示您在客戶端收到的404,而您應該從服務器端診斷此問題。你的IIS日誌對錯誤的確切原因說了什麼? WCF跟蹤告訴你什麼,該消息最終在WCF管道中?非WCF請求是否在同一個應用程序上工作? – CodeCaster
HTTP狀態404代碼通常意味着您正在使用的URL無法映射到服務操作。如果出現驗證錯誤,您將得到一個403.嘗試[啓用WCF跟蹤](http://stackoverflow.com/questions/4271517/how-to-turn-on-wcf-tracing)以確保HTTP請求正在通過IIS到WCF管道。 –
您可以請顯示您的其他服務配置。 –