You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WCF应用从SOAP迁移至REST调用接口报ContractFilter不匹配问题

问题根因

出现ContractFilter不匹配、Action为''的报错,核心是两个REST必要配置缺失,并非服务端无法识别方法名:

  • 终结点未关联webHttp行为:你虽然定义了包含<webHttp/>的终结点行为,但服务对应的endpoint节点没有绑定该行为,WCF仍会按SOAP协议逻辑校验请求的SOAP Action,自然无法处理无SOAP Action的普通HTTP请求。
  • 操作方法未配置REST路由特性:WCF REST模式要求每个对外暴露的接口方法标注[WebGet]或[WebInvoke]特性,明确HTTP方法、URI匹配规则,否则服务端无法将请求路径映射到对应方法。
修复步骤

1. 修正服务配置

首先调整endpoint节点配置,补上行为绑定,同时修复重复地址导致的路由冲突问题:

<endpoint 
    address="" 
    binding="webHttpBinding" 
    bindingConfiguration="NoSecurity" 
    contract="soapcon.IClearCoreSoap" 
    behaviorConfiguration="webHttpBehavior"
    name="ClearCore"/>

*注意:之前你同时给endpoint配置了绝对地址http://localhost:8853/ClearCore,又在host节点配置了相同的基地址,会导致地址叠加异常,将endpoint的address属性留空即可,最终服务基地址直接使用host下配置的http://localhost:8853/ClearCore。

2. 给契约方法添加REST路由特性

给接口的SecMyPermissions方法添加WebGet特性,指定URI匹配规则,无参数的查询类接口默认使用GET请求即可:

// 需先引用System.ServiceModel.Web命名空间
[ServiceContract]
[Guid("5098109F-DB33-44e6-87B8-1929C879515B")]
public interface class IClearCoreSoap
{
    [OperationContract]
    [WebGet(UriTemplate = "/SecMyPermissions", ResponseFormat = WebMessageFormat.Json)]
    [FaultContract(Exception::typeid)]
    virtual List<System::String^>^ SecMyPermissions();
}

*如果需要返回XML格式,将ResponseFormat参数修改为WebMessageFormat.Xml即可。

验证

修改完成后重启服务,再执行curl命令调用http://localhost:8853/ClearCore/SecMyPermissions即可正常获取返回结果。如果仍有异常,先排查8853端口是否被旧的SOAP模式服务进程占用,确保当前启动的是更新配置后的服务实例。

内容的提问来源于stack exchange,提问作者Simon Callan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 06:57:28