WCF报错:无终结点监听'localhost',404未找到及REST服务代码求助
解决WCF REST服务“无终结点监听localhost,返回404”的问题
我看你这是刚上手WCF REST服务遇到的经典配置坑,别慌,咱们一步步把它搞定。
首先,你给出的代码只完成了服务契约和实现,但WCF REST服务想要正常跑起来,正确的终结点与行为配置是核心——这也是你遇到404错误的根本原因,毕竟WCF默认是走SOAP协议的,REST需要专门的绑定和行为支持。
第一步:补全你的服务契约(ICalc.cs)
先把你没写完的JSONData操作契约补全,确保注解完整:
namespace WcfService1 { [ServiceContract] public interface ICalc { [OperationContract] [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "xml/{id}")] string XMLData(string id); [OperationContract] [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "json/{id}")] string JSONData(string id); } }
第二步:关键配置Web.config(重中之重)
你大概率漏掉了这个配置文件的核心内容,直接复制粘贴到你的Web.config的<configuration>节点内:
<system.serviceModel> <services> <service name="WcfService1.Calc"> <!-- REST服务核心终结点 --> <endpoint address="" binding="webHttpBinding" contract="WcfService1.ICalc" behaviorConfiguration="webHttpBehavior"/> <!-- 可选:元数据终结点,方便调试和添加服务引用 --> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> </service> </services> <behaviors> <endpointBehaviors> <behavior name="webHttpBehavior"> <!-- 启用WebHttp行为,让WCF支持REST风格请求 --> <webHttp/> </behavior> </endpointBehaviors> <serviceBehaviors> <behavior> <!-- 启用元数据发布,方便开发调试 --> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/> </system.serviceModel>
第三步:确认几个细节,避免踩坑
- 检查Calc.svc文件:确保它的内容正确指向你的服务类,内容应该是:
<%@ ServiceHost Language="C#" Debug="true" Service="WcfService1.Calc" CodeBehind="Calc.svc.cs" %> - 正确的访问地址:别直接访问
localhost,要带上服务入口的.svc路径,比如你的服务跑在http://localhost:5000,那测试地址应该是:- XML接口:
http://localhost:5000/Calc.svc/xml/123 - JSON接口:
http://localhost:5000/Calc.svc/json/456
- XML接口:
- 托管环境检查:如果用IIS Express,确保端口没被占用;用本地IIS的话,确认站点绑定的应用程序池是.NET兼容版本。
简单来说,你之前的问题就是没给WCF配置REST所需的绑定和行为,把上面的配置补全,再用正确的地址访问,404的问题就能解决了。
内容的提问来源于stack exchange,提问作者Arun
相关产品推荐
相关产品推荐

