Azure Fabric SDK本地集群WebAPI部署成功但MVC站点无法访问,求排查
嗨,我来帮你梳理下部署成功但访问提示“未找到”的常见遗漏配置,咱们一步步来排查:
确认端口协议与应用监听配置匹配
你在ServiceManifest.xml里定义了端口,但要确保端点指定了正确的协议(比如Protocol="http"),同时ASP.NET Core应用要监听这个端口。比如在Program.cs里通过UseUrls("http://*:你的端口号")明确配置监听地址,或者在appsettings.json里设置"Urls": "http://*:你的端口号"。如果协议不匹配(比如服务端用http但你访问https),或者应用没监听指定端口,必然会返回404。检查Application Manifest的端点关联
光在Service Manifest里定义端口还不够,要在ApplicationManifest.xml中确保无状态服务和端点正确绑定。查看ServiceManifestImport下的ResourceOverrides节点,确认它引用了Service Manifest里的端点名称,这样流量才能正确路由到你的服务实例。验证应用URL的格式与路由匹配
你配置的应用URL要注意格式,比如如果你的WebAPI用了默认路由[Route("api/[controller]")],那访问时不能只输http://localhost:端口号,得加上具体的API路径(比如http://localhost:端口号/api/你的控制器名)。另外URL末尾的斜杠有时候也会影响,不妨试试加上斜杠再访问。检查服务实例的运行状态
部署成功不代表服务真的正常启动了,打开Service Fabric Explorer(默认地址http://localhost:19080/Explorer),找到你的应用和服务,查看实例状态是不是Ready。如果是Error或者Upgrading状态,就得查看服务日志,排查启动失败的原因(比如依赖缺失、配置错误)。确认服务的通信监听器配置
对于无状态ASP.NET Core服务,必须在服务类的CreateServiceInstanceListeners方法里正确配置WebCommunicationListener,把Service Manifest里的端点传递给ASP.NET Core主机。举个正确的配置示例:protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() { return new[] { new ServiceInstanceListener(serviceContext => new WebCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) => { return WebHost.CreateDefaultBuilder() .UseKestrel() .ConfigureServices(services => services.AddSingleton(serviceContext)) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup<Startup>() .UseUrls(url) .Build(); })) }; }要是这个方法配置错误,服务没法接收外部请求,自然会返回404。
排查端口占用或防火墙问题
用命令netstat -ano | findstr :你的端口号检查端口是否被其他程序占用,如果被占用,换个未使用的端口重新配置部署。另外,本地防火墙可能会阻止端口访问,可以临时关闭防火墙测试,或者给该端口添加允许规则。
内容的提问来源于stack exchange,提问作者Shivprasad Koirala

