2014-01-14 62 views
0

我的團隊有一個用.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> 
+0

您只會向我們展示您在客戶端收到的404,而您應該從服務器端診斷此問題。你的IIS日誌對錯誤的確切原因說了什麼? WCF跟蹤告訴你什麼,該消息最終在WCF管道中?非WCF請求是否在同一個應用程序上工作? – CodeCaster

+1

HTTP狀態404代碼通常意味着您正在使用的URL無法映射到服務操作。如果出現驗證錯誤,您將得到一個403.嘗試[啓用WCF跟蹤](http://stackoverflow.com/questions/4271517/how-to-turn-on-wcf-tracing)以確保HTTP請求正在通過IIS到WCF管道。 –

+0

您可以請顯示您的其他服務配置。 –

回答

1

爲每個服務添加HTTP端點這樣的:

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

和相關的結合僅適用於HTTP:

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

OP已經在每個服務的配置文件中都有。 – Tim