发布于2026-07-23 阅读(0)
扫一扫,手机访问
这个题目听起来可能有点反直觉——既然都已经用上 .NET Core 了,为什么不直接用 API,反而回头去折腾老掉牙的 WebService?但既然能冒出这个需求,背后多半有些让人无奈的场景:客户指定要对接、业务系统历史遗留、领导拍脑袋决定,或者对接方的小工程师只认 .asmx 地址。形势比人强,那就试试新瓶装旧酒吧。
经常用 WebService 的朋友都知道,.NET Core 里没法直接新建一个 WebService 项目。所以咱们先建一个空的 .NET Core 模板,项目取名 TestWebService。框架版本根据实际需求选,建议 6.0 以上,我这里用的是 8.0。

项目建好之后,在 NuGet 控制台或管理界面给项目添加 SoapCore 引用。

接着新建一个接口文件 IMyWebService.cs,定义服务契约。
using System.ServiceModel;
namespace TestWebService
{
[ServiceContract]
public interface IMyWebService
{
[OperationContract] // 声明这是一个服务操作(方法)
string HelloWorld(string name);
}
}
然后实现这个接口,新建 MyWebService.cs。
namespace TestWebService
{
public class MyWebService : IMyWebService
{
public string HelloWorld(string name)
{
return $"Hello, {name}!";
}
}
}
关键的一步来了:修改 Program.cs,在 builder 后面注册服务。
// 注册服务 builder.Services.AddSoapCore(); builder.Services.AddSingleton();
然后在 app 后面添加终结点。
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.UseSoapEndpoint("/MyService.asmx", new SoapEncoderOptions(), SoapSerializer.XmlSerializer);
});
项目的结构以及 Program.cs 的完整代码如下图所示。

启动项目,在浏览器里访问 https://localhost:你的端口/MyService.asmx。如果看到下面的页面,说明一个简单的 WebService 已经跑起来了。

粗略观察一下,这里绑定的是 SOAP 1.1 协议。
但有些场景下需要用到 SOAP 1.2 协议,该怎么办?其实很简单,注册终结点的时候指定一下消息版本即可。
app.UseEndpoints(endpoints =>
{
endpoints.UseSoapEndpoint("/MyService.asmx",
new SoapEncoderOptions { MessageVersion = System.ServiceModel.Channels.MessageVersion.Soap12WSAddressing10 },
SoapSerializer.XmlSerializer);
});
再次启动并刷新页面,你会发现已经绑定上了 1.2 协议。
最后随便新建一个项目,添加服务引用,就可以看到我们刚刚搭建的 WebService 被自动发现了。后续把之前的业务逻辑迁移过来,一切就顺理成章了。

售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8