2017-03-28 15 views
1

現在、私は実際には維持したくない古いレガシーWCFサービスを持っていますが、いくつかのクライアントにはまだアクセス権があります。現在AzureのWEB API 2ですべてのAPIサービスを実行しています。下位互換性を有効にするには、私はそうのようなルーティング属性を使用したWEB 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ホスティングは、WCF呼び出しとして要求を処理する.SVCルートファイル仲間を持っていることです。オンラインでの広範な検索は、私がこの関連付けをどのように変更することができるか、またはこれが本当であるかどうかを確認することについて何かを見つけることに失敗しました。どのように修正するか、または代替の解決策に関するアイデアは非常に高く評価されます。

更新

は解決策を見つけたが、その完璧ではありません。 AppServiceインスタンス上のIISに直接接続し、ハンドラマッピングを変更することが可能であることを発見しました。これは完全ではありません。新しいインスタンスやデプロイメントスロットを作成するときに手動で変更する必要があり、プロセス全体を自動化することが望ましいからです。

誰かがこれをやりたい場合は、benjamin perkinsのチュートリアルに従うことができます。私はIIS Manager for remote administration拡張機能をWindows 10にインストールする必要がありましたが、これは機能するためです。 * .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