C# 如何在web api上发布SOAP消息(asp.net核心->;web api)

C# 如何在web api上发布SOAP消息(asp.net核心->;web api),c#,soap,asp.net-web-api,asp.net-core,C#,Soap,Asp.net Web Api,Asp.net Core,我想将一条基于SOAP XML的消息发布到我在ASP.NET核心项目模板中创建的Web API 现在,当我发布内容类型为application/soap+xml的文章时,我遇到了不受支持的媒体类型错误 我知道我们应该向基于WCF的服务发送SOAP消息,但我们的要求是这样的。我应该能够使用web API中的SOPA消息 谢谢, Sudama以下是一个由两部分组成的答案: 使用ASP.NET核心公开SOAP服务: 微软不打算在ASP.NET核心中移植支持SOAP的服务,也不打算在不久的将来移植(看

我想将一条基于SOAP XML的消息发布到我在ASP.NET核心项目模板中创建的Web API

现在,当我发布内容类型为application/soap+xml的文章时,我遇到了不受支持的媒体类型错误

我知道我们应该向基于WCF的服务发送SOAP消息,但我们的要求是这样的。我应该能够使用web API中的SOPA消息

谢谢,
Sudama

以下是一个由两部分组成的答案:

使用ASP.NET核心公开SOAP服务:

  • 微软不打算在ASP.NET核心中移植支持SOAP的服务,也不打算在不久的将来移植(看看哪些国家的情况是相同的)

  • 这就是说,没有任何东西阻止您使用普通的.NET Framework,它支持使用旧的ASMX或WCF(至少是.NET Framework 4.5.x的一部分)的SOAP(有支持)

  • 最后,SOAP似乎只是您的一项技术要求,因此您可以构建一个瘦SOAP层,只需将调用转移到您的主要ASP.NET核心服务

唯一的限制是支持在Linux上部署它,而完整的.NET Framework不是在Linux上本机运行的;如果没有,你可以走了

使用SOAP服务赢得ASP.NET核心:


ASP.NET Core通过使用支持使用ASP.NET Core中的SOAP服务。

我通过实现自定义输入和输出格式化程序解决了此问题。这些格式化程序是简单的类,它们只是实现由.NETCore提供的IIInputFormatter和IOutFormatter。使用上下文对象读取传入请求,并以您想要的格式(xml或Json)序列化它们

我知道这个问题已经得到了回答,但是为了将来的参考,我还为Sudama实现了一个类似的解决方案

我需要使用从Salesforce传输的SOAP消息,因为没有其他选项可用,所以我在.NETCore中实现了一个SOAP格式化程序,用于转换传入的请求

请求主体的read-once流存在一些技术挑战,但如果您觉得有用,我在下面提供了一个指向项目代码的链接:


对于不懂SOAP的服务,您将如何使用SOAP?没有明智的方法将WebAPI转换为SOAP。您必须使用WCF服务,别无选择,这意味着使用完整的.NET框架。WebAPI是一个REST Api,而不是SOAPI。我在下面的代码中使用它来发布SOAP消息和检索基本上是xml的正文,现在我正在尝试对其进行反序列化,但缺少错误根元素,否则我似乎需要围绕[HttpPost]公共查找帖子([FromBody]XmlDocument XmlDocument){var soapBody=XmlDocument.GetElementsByTagName进行查找(“soap12:Body”)[0];字符串innerObject=soapBody.InnerXml;XmlSerializer反序列化器=新XmlSerializer(typeof(Find));使用(TextReader=new StreamReader(innerObject)){返回(Find)反序列化器。反序列化(reader);}当然,您可以从请求正文中读取有效负载。但为此,您需要启用缓冲/倒带。请参阅Tratcher的回答(注释更具体)在这里,您可以使用XmlDocument的
Load
方法自己解析流……但这会消耗更多内存,具体取决于soap payloadBut的大小。但是这里应该注意,如果您也从主体中获取操作参数,则只需要缓冲/倒带,因为请求流只能通过de进行转发故障(只能读取一次)如果是这种情况,那么我们将如何在分布式系统中集成不同的服务?我有一个客户端,它只能发送soap消息,还有一个下游系统,它只能接收soap格式的消息,还有一个中间件,我们正在使用.NET核心构建,那么这种集成将如何进行k?还想检查.net核心是否不可能通过使用早期版本的.net(例如web api 2)构建的web api端点使用SOAP消息?请将此代码正确地用于您的问题,以便其可读性请参考此链接您所走的道路似乎有点太复杂…手动解析xml如何确保任何调用方需要SOAP端点的可靠性/安全性?