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

如何配置CoreWCF SOAP服务生成单文件扁平WSDL

CoreWCF生成单文件(扁平)WSDL实现方案

CoreWCF原生支持输出无外部引用的单文件扁平WSDL,无需引入第三方依赖,仅需修改元数据导出配置即可实现。

实现原理

默认配置下CoreWCF导出WSDL时,会将数据契约对应的XML Schema拆分为独立XSD文件,通过wsdl:import、xsd:import标签引用外部资源;只要配置WSDL导出器启用内联Schema模式,即可将所有类型定义、WS-Policy策略全部合并到单个WSDL文档中,消除外部依赖。

具体修改步骤

  • 确保项目使用1.0及以上正式版本的CoreWCF官方包
  • 在现有配置ServiceMetadataBehavior的代码段,为其指定自定义配置的WsdlExporter,开启内联导出选项

修改后完整代码

using CoreWCF;
using CoreWCF.Configuration;
using CoreWCF.Description;

var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{    
    options.AllowSynchronousIO = true;
    options.Listen(System.Net.IPAddress.Any, 5800, listenOptions =>
    {
        listenOptions.Protocols = Microsoft.AspNetCore.Server.Kestrel.Core.HttpProtocols.Http1AndHttp2;
        // 原代码sUrl变量请按实际业务逻辑提前定义
        if (sUrl.Scheme == "https") listenOptions.UseHttps();
    });
});

builder.Services.AddServiceModelServices().AddServiceModelMetadata();
builder.Services.AddSingleton<IServiceBehavior, UseRequestHeadersForMetadataAddressBehavior>();

var app = builder.Build();
var binding = new WSHttpBinding(SecurityMode.Transport);

app.UseServiceModel(builder =>
{
    builder.AddService<MyService>()
    .AddServiceEndpoint<MyService, IMyService>(binding,"MyService");
});

var serviceMetadataBehavior = app.Services.GetRequiredService<ServiceMetadataBehavior>();
serviceMetadataBehavior.HttpsGetEnabled = true;
// 启用内联Schema导出,生成单文件无外部依赖的扁平WSDL
serviceMetadataBehavior.WsdlExporter = new WsdlExporter
{
    ExportOptions = WsdlExportOptions.InlineSchemas
};

app.Run();

验证方式

启动服务后访问WSDL地址(格式为https://<服务地址>:5800/MyService?wsdl),检查返回内容:

  • 不存在指向?xsd=xxx、?wsdl=xxx的外部import标签
  • 所有数据类型定义全部包含在WSDL的<wsdl:types>节点内
    即为配置生效。

该配置对服务下所有绑定类型的端点均生效,无需针对单个端点重复设置。

内容的提问来源于stack exchange,提问作者Michalor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:15:47