2010-12-07 56 views
1

我在啓用通配符映射時在IIS6上執行WCF方法時收到404s。每種方法的WCF +通配符映射+ IIS6 = 404s!

你可以通過在VS2008中創建一個新的WCF服務(新建項目> WCF服務應用程序)來重現這一點。瀏覽到虛擬方法('GetData')...你會注意到它返回400 ...這很好,因爲它顯示它仍然轉發到WCF。

但是:如果您在IIS6中啓用通配符映射,您現在將獲得404,這意味着WCF不再攔截請求。

我的代碼如下:

[ServiceContract] 
public interface IRest { 
    [OperationContract] 
    [WebGet(UriTemplate = "/test")] 
    int Test(); 
} 

用下面的web.config:

<system.serviceModel> 
    <behaviors> 
    <endpointBehaviors> 
     <behavior name="ServiceX.RestBehavior"> 
     <webHttp /> 
     </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
     <behavior name="ServiceX.RestBehavior"> 
     <serviceMetadata httpGetEnabled="false" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 

    <serviceHostingEnvironment aspNetCompatibilityEnabled="false" /> 

    <services> 
    <service behaviorConfiguration="ServiceX.RestBehavior" 
     name="ServiceX.Rest"> 
     <endpoint address="" behaviorConfiguration="ServiceX.RestBehavior" 
     binding="webHttpBinding" contract="ServiceX.IRest" /> 
    </service> 
    </services> 
</system.serviceModel> 

所有作品,未經通配符映射罰款;我可以瀏覽到'/services/rest.svc/test',我會收到預期的結果。但是,只要我啓用通配符映射(。*> C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll),那麼當我嘗試訪問一個方法時,我就開始接收404s儘管我仍然可以查看'/services/rest.svc')。

我已經用盡谷歌和StackOverflow上:(

回答

3

我剛和IIS6上運行的WCF服務相同的問題。

我可以瀏覽上http://someurl/service.svc的服務,但我會得到一個404,當打在服務上的方法,如http://someurl/service.svc/somemethod

修復,在我的情況,很容易.svc文件類型在IIS中配置爲由C:\ Windows \ Microsoft.NET \ Framework \ v2處理。 0.50727 \ aspnet_isapi.dll,但我的服務在ASP.NET v4.0 apppool中運行,所以我只是指出.svc文件類型t o由C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_isapi.dll處理。

+0

解釋您爲達到此目的所採取的步驟將非常有幫助,謝謝。 – robyaw 2012-04-18 07:10:02