【问题标题】:Simulating WCF route in WEB API 2在 WEB API 2 中模拟 WCF 路由
【发布时间】:2017-08-22 04:36:35
【问题描述】:

我们目前有一个旧的 WCF 服务,我真的不想维护,但有几个客户端仍然可以访问。我们目前在 Azure 的 WEB API 2 中运行我们所有的 API 服务。为了实现向后兼容性,我希望使用属性路由在 WEB API 中模拟 WCF 路由,如下所示:

[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并更改Handler Mappings。这并不完美,因为在创建新实例或部署槽时需要手动更改,而我更愿意自动化整个过程。

如果其他人想这样做,您可以按照benjamin perkins 的教程进行操作。我确实必须在 Windows 10 上安装一个 IIS Manager for remote administration 扩展,但它才能正常工作。我删除了与 *.svc 关联的所有映射,并且路由现在可以正常工作了。

【问题讨论】:

  • 为该特定路径添加一个处理程序,以便您可以在 iis 处理它之前拦截它

标签: c# wcf azure asp.net-web-api2 azure-web-app-service


【解决方案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 关联的处理程序。

【讨论】:

  • 我一直在寻找这个解决方案,需要使用 WebAPI 模拟 WCF。您在 web.config 中删除 svc 处理程序的解决方案效果很好 - 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 2015-05-21
  • 2018-08-25
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
相关资源
最近更新 更多