c# - 如何在 WebAPI 上实现 SOAP 服务

标签 c# wcf soap asp.net-web-api

我们有一个服务器,它有几种类型的 api(基于 httplistener 的自定义 XML API、基于 WCF 的 SOAP API 和基于 WEB API 的 REST API)。我们希望将所有 API 移动到 WEB API(有很多原因)并且它应该向后兼容。

支持url结构的原因之一:services/service1。服务/服务2。在这种情况下,它应该在一个端口上。它是分发给多个客户的 Intranet 应用程序,应该易于部署、安装。因此,我们不能在客户端(代理和其他)进行长配置。

有没有简单的方法可以在 web api 上实现 SOAP 服务?乍一看应该是将 httprequest 解析为类型化的 soap 信封(基于现有契约(Contract))并序列化答案的简单方法。当然,合约中还有很多 Action 和数据类型。

PS:我不想研究服务栈:)

更新:

我上面描述的问题可以通过将 http 请求代理到 soap 服务来解决(它只能与没有安全性的 basichttpbinding 一起工作。如果 WCF 服务需要 NTLM 身份验证,它将无法工作):

[HttpPost]
public async Task<IHttpActionResult> SoapAction()
{
    var httpClient = new HttpClient();

    var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, "http://localhost:8111/soap")
    {
        Content = this.Request.Content
    };

    foreach (var header in this.Request.Headers)
    {
        httpRequestMessage.Headers.Add(header.Key, header.Value);
    }

    var responseMessage= await httpClient.SendAsync(httpRequestMessage).ConfigureAwait(false);

    return ResponseMessage(responseMessage);
}

但是我还是想知道有没有C#的SOAP解析器,因为我的服务器支持NTLM认证。

最佳答案

我不建议混合使用这些技术。一个项目用于 SOAP Apis,另一个项目用于 WebApi,共享相同的逻辑。

然后您有一个用于 soap 的 url,另一个用于 webapi。

编辑: 我根本不会做 SOAP 解析器。这就是 WCF 的强大之处,我会继续使用它。

由于代理不是一个选项(可以在 web.config 中完成并轻松部署),我将创建一个 WebAPI 端点,它将重定向到 SOAP API。

[HttpGet]
public IHttpActionResult Service1()
{
   return Redirect("http://service.com/soap/services/service1");
}

稍后,在迁移逻辑时,使用服务本身。

[HttpGet]
public IHttpActionResult Service1()
{
   var result = new ServiceLogin1().Execute();
   if(result == null)
   {
          return StatusCode(HttpStatusCode.NoContent);
   }
   else
   {
          return Ok();
   }
}

关于c# - 如何在 WebAPI 上实现 SOAP 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40893529/

相关文章:

c# - 正则表达式无法过滤 WinForms 中的 TextBox 字符

c# - WPF 样式中的继承反转

c# - Entity Framework Core - 自定义脚手架

wcf - WCF 中的 ABC 代表什么?

c# - 执行异步 WCF 调用时首选哪种方式?

c# - 在 Visual Studio 2008 中将 Soap header 添加到 Soap 请求

sharepoint - 如何从 UpdateListItems SOAP 响应中获取错误详细信息?

xml - MinOccurs 0 和 nillable true

c# - XAML 和 C# 代码背后的 UI 区别

wcf - 通过 WCF 处理大量导入的最佳实践?