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

发布到服务器后调用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项目结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:55:15