发布到服务器后调用ASP.NET API出现404 Not Found错误求助
ASP.NET WCF API发布到IIS后出现404 Not Found错误
问题现象
- 本地IIS Express(端口51937)调用WCF API(
MercuryDataConnectivity.svc)的GetSidewalksXml/GetSidewalksJson接口均正常返回数据 - 发布到服务器IIS后,通过控制台应用调用API时报错:
The remote server returned an error: (404) Not Found - 服务器上网站目录列表可正常访问,但点击目录内任何文件(包括
.svc文件)均触发404错误
API项目结构

测试调用代码
using Mercury_Api; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace DemoConsoleApplication { class Program { static void Main(string[] args) { string consumerKey = "xxx"; string consumerSecret = "xxxxx"; //var uri = new Uri("http://localhost:51937/MercuryDataConnectivity.svc/GetSidewalksXml/0/0/267"); //var uri = new Uri("http://localhost:51937/MercuryDataConnectivity.svc/GetSidewalksJson/0/0/267"); var uri = new Uri("http://testsite.com/MercuryDataConnectivity.svc/GetSidewalksXml/0/0/267"); string url, param; var oAuth = new OAuthBase(); var nonce = oAuth.GenerateNonce(); var timeStamp = oAuth.GenerateTimeStamp(); var signature = oAuth.GenerateSignature(uri, consumerKey, consumerSecret, string.Empty, string.Empty, "GET", timeStamp, nonce, OAuthBase.SignatureTypes.HMACSHA1, out url, out param); WebResponse webrespon = (WebResponse)WebRequest.Create( string.Format("{0}?{1}&oauth_signature={2}", url, param, signature)).GetResponse(); StreamReader stream = new StreamReader(webrespon.GetResponseStream()); Console.WriteLine(stream.ReadToEnd().ToString()); Console.ReadLine(); } } }
已排查项
- 目录权限、应用池权限配置
- 尝试切换.NET Framework 4.0、应用池启用非托管代码、集成/经典模式
解决建议
1. 安装IIS的WCF HTTP激活组件
WCF服务依赖服务器IIS的HTTP激活组件,需确保已安装:
- 打开服务器管理器 → 角色和功能 → 找到已安装的.NET Framework 4.0
- 展开WCF服务,勾选HTTP激活,完成安装后重启IIS
2. 重新注册.NET Framework和WCF处理程序到IIS
以管理员权限打开命令提示符,执行以下命令:
# 注册32位.NET Framework到IIS %windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i # 64位系统额外执行此命令 %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i # 注册WCF处理程序 %windir%\Microsoft.NET\Framework\v4.0.30319\ServiceModelReg.exe -i
3. 验证IIS Handler映射
- 打开IIS管理器,进入对应站点 → Handler映射
- 确认存在
.svc对应的处理程序(如svc-Integrated或svc-Classic),若缺失则执行步骤2的注册命令
4. 检查URL重写与WCF终结点配置
- 若站点使用了URL重写模块,临时禁用所有规则测试是否恢复正常
- 检查API项目
web.config中的WCF终结点配置,确保<services>下的终结点address与服务器访问路径匹配,示例配置:<services> <service name="Mercury_Api.MercuryDataConnectivity"> <endpoint address="" binding="webHttpBinding" contract="Mercury_Api.IMercuryDataConnectivity" behaviorConfiguration="webBehavior"/> </service> </services>
5. 启用失败请求跟踪排查细节
- 进入IIS站点 → 失败请求跟踪规则,添加规则捕获404状态码的请求
- 查看生成的跟踪日志,可明确请求被拦截的具体环节(如模块拦截、处理程序缺失等)
6. 本地直接测试服务可用性
在服务器本地浏览器访问http://localhost/MercuryDataConnectivity.svc:
- 若仍返回404,聚焦服务器IIS本身的配置问题
- 若能正常访问,检查域名绑定、防火墙或反向代理的规则设置
内容的提问来源于stack exchange,提问作者Steve Ed
相关产品推荐
相关产品推荐

