C# 从ASP.NET核心web方法提供SOAP

C# 从ASP.NET核心web方法提供SOAP,c#,web-services,soap,asp.net-core,C#,Web Services,Soap,Asp.net Core,在经典的ASP.NET中,我们只需使用WebMethod属性标记一个方法,即可创建一个可以从外部应用程序调用的SOAP服务方法。我们如何使用ASP.NET核心实现同样的功能 它必须是基于XML SOAP的。它必须与ASP.NET类作为后端时工作的客户端兼容。您可以使用NuGet包来实现这一点。假设您有一份如下所示的合同: [服务合同] 公共接口IPingService { [经营合同] 字符串Ping(字符串msg); } 以及实施: public类SampleService:IPingSer

在经典的ASP.NET中,我们只需使用
WebMethod
属性标记一个方法,即可创建一个可以从外部应用程序调用的SOAP服务方法。我们如何使用ASP.NET核心实现同样的功能

它必须是基于XML SOAP的。它必须与ASP.NET类作为后端时工作的客户端兼容。

您可以使用NuGet包来实现这一点。假设您有一份如下所示的合同:

[服务合同]
公共接口IPingService
{
[经营合同]
字符串Ping(字符串msg);
}
以及实施:

public类SampleService:IPingService
{
公共字符串Ping(字符串msg)
{
返回string.Join(string.Empty,msg.Reverse());
}
}
然后注册该服务:

public void配置服务(IServiceCollection服务)
{
AddSingleton(新的PingService());
services.AddMvc();
//其余的在这里
}
公共void配置(IApplicationBuilder应用程序、IHostingEnvironment环境、iLogger工厂)
{
app.UseSoapEndpoint(路径:“/PingService.svc”,绑定:new BasicHttpBinding());
app.UseMvc();
//其余的在这里
}
进一步阅读

扩展@CodingYoshi提出的解决方案,这很好

当我安装SoapCore时,我必须首先安装所有依赖项以下是列表:

安装软件包Microsoft.Extensions.Primitives-版本2.2.0
安装软件包Microsoft.AspNetCore.Http.Features-版本2.2.0
安装软件包Microsoft.AspNetCore.Http.Abstractions-版本2.2.0
安装软件包Microsoft.Net.Http.Headers-版本2.2.0
安装软件包Microsoft.AspNetCore.WebUtilities-版本2.2.0
安装包Microsoft.Extensions.DependencyInjection.Abstractions-版本2.2.0
安装软件包Microsoft.Extensions.ObjectPool-版本2.2.0
安装软件包Microsoft.Extensions.Options-版本2.2.0
安装软件包Microsoft.AspNetCore.Http-版本2.2.2
安装软件包Microsoft.Extensions.Logging.Abstractions-版本2.2.0
安装软件包SoapCore-版本0.9.9.5
然后在我的
Startup.cs
中添加了以下内容:

app.UseSoapEndpoint(“/IMyService.svc”,新的BasicHttpBinding(),SoapSerializer.XmlSerializer);
app.UseSoapEndpoint(“/IMyService.svc”,new BasicHttpBinding(),SoapSerializer.XmlSerializer);
app.UseSoapEndpoint(“/V3/IMyService.svc”,新的BasicHttpBinding(),SoapSerializer.XmlSerializer);
app.UseMvc();

Hmmm。。。。这看起来像WCF。我已经可以提供WCF了。也许我遗漏了什么。我可以用BassicHttpBinding提供一个WCF服务吗?是否可以使用SoapCore获得一个复杂的深度嵌套的XML文档作为传入请求的输出?例如,假设我们只需要复杂SOAP请求中的几个元素,并且需要整个请求体(没有信封)通过Xpath进行解析。您的函数Ping可以接收SOAP主体的元素吗?我一直在玩SoapCore,似乎您必须创建一个与XML层次结构匹配的模型层次结构。@mtpultz我不太清楚。抱歉。谢谢@CodingYoshi,我最后添加了一个调谐器服务,获取原始请求并使用Xpath解析它。它很笨拙,因为它必须解析soap信封和body标记,但是它工作得很好,不需要反序列化到一组模型中。谢谢你的回复