如何修改CoreWCF项目的监听地址?SoapUI测试显示localhost5203
解决CoreWCF监听地址修改无效的问题
一、ASP.NET Core托管场景(最常见)
CoreWCF在ASP.NET Core环境下托管时,监听地址由ASP.NET Core的服务器配置说了算,别再死磕传统的web.config/wcf.config了,这是多数人踩坑的核心点:
- 直接在Program.cs里指定Kestrel配置
代码示例:var builder = WebApplication.CreateBuilder(args); // 配置监听地址,下面两种方式二选一 builder.WebHost.UseKestrel(options => { // 方式1:监听所有IP的8080端口(允许局域网/外网访问) options.ListenAnyIP(8080); // 方式2:指定具体IP和端口 // options.Listen(IPAddress.Parse("192.168.1.100"), 8080); }); // 注册CoreWCF服务 builder.Services.AddServiceModelServices(); builder.Services.AddSingleton<IMyService, MyService>(); var app = builder.Build(); app.UseServiceModel(builder => { builder.AddService<MyService>(); // 这里的"/MyService"是服务端点路径,完整地址是 配置的IP:端口/MyService builder.AddServiceEndpoint<MyService, IMyService>(new BasicHttpBinding(), "/MyService"); }); app.Run(); - 通过appsettings.json配置
在appsettings.json里加Kestrel节点,不用改Program.cs也能生效:"Kestrel": { "Endpoints": { "Http": { "Url": "http://0.0.0.0:8080" } } }
二、控制台自托管场景
如果是控制台跑的CoreWCF服务,直接在宿主初始化时指定BaseAddress:
using CoreWCF; using CoreWCF.Configuration; var host = new ServiceHost(typeof(MyService)); // 明确写死监听的IP、端口和服务路径 host.AddServiceEndpoint(typeof(IMyService), new BasicHttpBinding(), "http://192.168.1.100:8080/MyService"); host.Open(); Console.WriteLine("服务已启动,地址:http://192.168.1.100:8080/MyService"); Console.ReadLine(); host.Close();
三、常见问题排查
- 旧进程没清:修改端口后还是跳旧地址?打开任务管理器杀掉所有dotnet相关进程,再重启服务。
- SoapUI缓存坑:SoapUI会缓存旧的WSDL地址,直接输入新的服务地址重新导入WSDL就行。
- 网络权限问题:要让其他机器访问的话,别用localhost当监听地址,换成0.0.0.0或者本机实际IP,同时确保端口没被防火墙拦截。
内容的提问来源于stack exchange,提问作者Saytomo
相关产品推荐
相关产品推荐

