如何为.NET Core 3.1开发的SoapCore XML服务添加可访问metadata
解决SoapCore服务开启metadata访问的方案
步骤1:确认依赖安装
确保项目已安装最新稳定版SoapCore NuGet包,可通过包管理器控制台执行命令:Install-Package SoapCore
或者通过.NET CLI执行:dotnet add package SoapCore
步骤2:注册SOAP相关服务
在Startup.cs的ConfigureServices方法中添加SOAP服务注册配置:
public void ConfigureServices(IServiceCollection services) { // 保留原有其他服务注册逻辑 services.AddSoapCore(); // 注册你的服务实现类 services.AddScoped<ICallbackService, CallbackService>(); }
如果你使用的是.NET 6+的顶层语句Program.cs,直接在服务注册阶段添加即可:
var builder = WebApplication.CreateBuilder(args); // 保留原有其他服务注册逻辑 builder.Services.AddSoapCore(); builder.Services.AddScoped<ICallbackService, CallbackService>(); var app = builder.Build();
步骤3:修改终结点配置开启元数据
修改你原有的UseSoapEndpoint配置,添加enableMetadata: true参数开启元数据支持,示例如下:
var transportBinding = new HttpTransportBindingElement(); var textEncodingBinding = new TextMessageEncodingBindingElement(MessageVersion.Soap12WSAddressing10, System.Text.Encoding.UTF8); var customBinding = new CustomBinding(transportBinding, textEncodingBinding); // 每个终结点单独配置开启元数据 app.UseSoapEndpoint<ICallbackService>("/ExportShipments", customBinding, SoapSerializer.XmlSerializer, enableMetadata: true); app.UseSoapEndpoint<ICallbackService>("/SetShipmentsToCompleted", customBinding, SoapSerializer.XmlSerializer, enableMetadata: true); app.UseSoapEndpoint<ICallbackService>("/ExportProductQuantitiesForNewOrders", customBinding, SoapSerializer.XmlSerializer, enableMetadata: true);
步骤4:确认服务契约特性配置
确保你的ICallbackService接口和对应方法已添加WCF契约特性,否则元数据无法正常生成:
[ServiceContract] public interface ICallbackService { [OperationContract] Task<自定义响应类型> ExportShipments(自定义请求类型 request); [OperationContract] Task<自定义响应类型> SetShipmentsToCompleted(自定义请求类型 request); [OperationContract] Task<自定义响应类型> ExportProductQuantitiesForNewOrders(自定义请求类型 request); }
验证效果
配置完成后重新启动服务,访问https://你的域名/ExportShipments/$metadata即可正常获取XML格式的元数据内容。
内容的提问来源于stack exchange,提问作者DaveCore
相关产品推荐
相关产品推荐

