【问题标题】:Can WCF WebHttp endpoints coexist with MVC and Web API?WCF WebHttp 端点可以与 MVC 和 Web API 共存吗?
【发布时间】:2014-12-20 05:48:46
【问题描述】:

我有一个广泛分布的遗留 Web 表单 asp.net 应用程序,其中一些 WCF 服务公开为 webHttp 端点。我正在重新设计应用程序以引入最适合作为 MVC 和 Web API 控制器实现的功能。

自从将 MVC 和 Web API 引入应用程序以来,没有一个 WebHTTP 端点是可访问的。 例如 Printing.svc 实现了一个接口:

[ServiceContract]
public interface IPrinting
{
    [WebGet(UriTemplate = "Printers")]
    List<string> Printers(string profile);
}

我可以成功导航到printing.svc 和printing.svc/metadata,但是printing.svc/help 或printing.svc/Printers 都返回400 错误(空白页)。所有的 Web API 和 MVC 路由都可以工作,soap 绑定的 wsdl 也可以工作。只是不是“REST”WCF 端点。

我已经为 .svc 路由添加了忽略值:

routes.IgnoreRoute("{resource}.svc");
routes.IgnoreRoute("{resource}.svc/{*pathInfo}");

仍然没有骰子。 我已经在 Web API 中重现了所有这些功能,但希望在旧版部署中保持旧服务处于活动状态。

那么,这两种技术可以共存吗?

是否有任何变通办法,或者是时候放弃“REST”WCF 端点并继续前进了吗?

编辑

解决办法: 正如建议的那样,我在 Web API 和 MVC 中禁用了路由,最终不得不从以下位置进行更改:

<endpointBehaviors>
  <behavior name="restBehaviour">
    <webHttp />
  </behavior>
  <behavior name="wsBehaviour" />
</endpointBehaviors>

到:

<endpointBehaviors>
  <behavior name=""><!-- Added -->
    <webHttp />
  </behavior>
  <behavior name="restBehaviour">
    <webHttp />
  </behavior>
  <behavior name="wsBehaviour" />
</endpointBehaviors>

即使我的服务是:

<service name="K3.Reports.Web.Printing">
  <endpoint address="" binding="webHttpBinding" contract="K3.Reports.Contracts.IPrinting" behaviorConfiguration="restBehaviour" />
</service>

【问题讨论】:

    标签: asp.net asp.net-mvc wcf asp.net-web-api


    【解决方案1】:

    据我所知,这些技术可以共存。我们的应用程序是一个 WebForms 应用程序,其中包括一些用于 RSS 提要的 WCF“休息”端点以及一个 REST WebApi。

    因此,在某些情况下,默认 API 路由可能会接管 WCF 路由。您是否尝试停用默认路由?

    如果是,您可能希望在您的问题中添加更多详细信息,例如您的路线配置方式和正在运行的版本。

    【讨论】:

    • 这很明显,但却难以捉摸。谢谢。我在 MVC 和 Web API 中禁用了路由,并花了一个多小时进行故障排除,发现它只有在我使用
    【解决方案2】:

    这是一个很好的问题。大多数问题使这两种技术相互对抗。在 WCF 中,我使用 WCF 中内置的事务、故障异常处理和其他技术。我喜欢使用 Web API 2,但从客户端(Web 浏览器)到托管该 API 的 IIS 服务器都是这样做的。我们公司致力于在防火墙后面使用与 Web API 2 兼容的服务,甚至可能更容易实现。不过,我担心的是,从 WCF 切换到 Web API 2 时,我需要“扮演我自己的角色”会失去多少。我读过的关于 Web API 2 的分布式事务支持的示例是指使用配置 DTC(呃)。 WCF 和 Web API 2 是否可以被视为代理和远程服务实现(存根)之间的传输机制?如果是这样,我可以使用 Web API 2 来发起服务请求、传入数据并使用 WCF 技术吗?太多人认为 Web API 是 WCF 的演变,而 WCF 已经过时和/或已死。 Web API 似乎不适合我们需要使用的 SOA 环境,因此在 SOA 环境中开发基于前端到后端的基于 Web 的解决方案时,两全其美会很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 2021-01-11
      • 2015-05-05
      • 1970-01-01
      • 2011-12-29
      • 2023-03-15
      相关资源
      最近更新 更多