【发布时间】: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