dotnet core 中基于 .asmx 的 SOAP 的推荐替代方案是什么?

问题描述 投票:0回答:1

我们正在将服务器应用程序升级到 .NET Core 6。它通过 .ASMX 页面向多个现有客户端提供 SOAP Web 服务。 .NET Core 不再支持服务器端 WCF。 gRPC,或者至少是 CoreWCF,是推荐的替代方案。不幸的是,我们无法控制数百个已部署的客户端应用程序。替代方案必须与它们完全兼容,包括硬编码的 URL 和消息格式。

据我了解,gRPC 是 WCF 的替代品,但尚不清楚它是否能够支持 SOAP over HTTP。另一种替代方案 CoreWCF 确实支持它,但对于权宜之计来说,这可能是一项重大的技术投资。如果能够利用学习曲线来学习更流行的东西,那就太好了。目前尚不清楚这两种解决方案是否能够为 ASMX 文件提供服务。

gRPC 支持 SOAP 吗?如果是这样,它是否简单,或者是否需要大量的开发工作?最后,CoreWCF 或 gRPC 是否支持提供 ASMX 文件?如果没有,是否可以简单地无缝响应 ASMX URL?

wcf soap grpc asmx
1个回答
0
投票

我找到了 SoapCore,这是一个完美满足我们需求的解决方案。

https://github.com/DigDes/SoapCore

我错误地认为 ASMX 是 WCF 功能,但它只是 ASP.NET 为基本服务器端 HTTP/SOAP 提供的工具。由于我们的应用程序基于 ASP.NET,因此可以通过 MVC URL 路由访问 ASMX URL:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSoapCore();
    services.TryAddSingleton<ServiceContractImpl>();
    services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseRouting();

    // Route "ServicePath.asmx" to our service endpoint
    app.UseEndpoints(endpoints => {
        endpoints.UseSoapEndpoint<ServiceContractImpl>("/ServicePath.asmx", new SoapEncoderOptions(), SoapSerializer.DataContractSerializer);
    });
    
}

虽然它是一个权宜之计的解决方案,但它具体来说是一个 SOAP 消息传递库,而不是一个通用协议框架。设置并将其投入生产需要直接且简单。

© www.soinside.com 2019 - 2024. All rights reserved.