WCF WebHttp端点可以与MVC和Web API共存吗?

时间:2014-10-24 11:34:25

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

我有一个广泛分布的遗留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>

2 个答案:

答案 0 :(得分:2)

据我所知,这些技术可以共存。我们的应用程序是一个WebForms应用程序,包括一些WCF&#34; rest&#34; RSS源的端点以及REST WebApi。

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

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

答案 1 :(得分:0)

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