2017-03-28 164 views
1

我們目前有一箇舊的傳統WCF服務,我真的不想維護,但仍有幾個客戶端可以訪問。我們目前在Azure的WEB API 2中運行所有的API服務。要啓用向後兼容性我希望使用路由屬性,像這樣來模擬網絡API的WCF路由:在WEB API中模擬WCF路由2

[RoutePrefix("registration.svc")] 
public class RegistrationDeprecatedController : ApiController 
{ 

    [HttpPost] 
    [Route("login")] 
    public async Task<HttpResponseMessage> Login(CredentialModel creds) 
    {... 

本地運行,這就像一個夢。只要我發佈到Azure AppService,但是我得到的所有內容都是404未找到。具體路線問題:

/registration.svc/login 

我懷疑是IIS主機有.svc路由文件關聯處理請求作爲WCF調用。在線廣泛的搜索未能找到任何有關如何改變這種關聯的信息,甚至無法確認是否屬實。任何想法如何解決或替代解決方案將不勝感激。

更新

找到了解決辦法,但它並不完美。發現可以直接連接到AppService實例上的IIS並更改處理程序映射。這並不完美,因爲創建新實例或部署插槽時需要手動更改,我寧願將整個過程自動化。

如果其他人想這樣做,你可以按照benjamin perkins的教程。我確實需要在Windows 10上安裝一個IIS Manager for remote administration擴展,但爲了這個工作。我刪除了與* .svc關聯的所有映射,並且路由正在工作。

+1

爲該特定路徑添加處理程序,以便在iis可以處理它之前攔截它 – Nkosi

回答

1

最終的解決方案是刪除web.config中的處理程序。

<system.webServer> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <remove name="OPTIONSVerbHandler" /> 
     <remove name="TRACEVerbHandler" /> 
     <remove name="svc-Integrated" /> 
     <remove name="svc-Integrated-4.0" /> 
     <remove name="svc-ISAPI-2.0" /> 
     <remove name="svc-ISAPI-2.0-64" /> 
     <remove name="svc-ISAPI-4.0_32bit" /> 
     <remove name="svc-ISAPI-4.0_64bit" /> 
     .... 
    </handlers> 

我能夠通過連接到AppService實例上的IIS找到名稱。我不確定哪些需要刪除,所以我刪除了所有與* .svc關聯的處理程序。

+0

我剛剛在尋找這個解決方案,需要使用WebAPI模擬WCF。您在web.config中移除svc處理程序的解決方案非常完美 - 謝謝! – James