【问题标题】:WCF How to change soap request method name .NET Core APIWCF如何更改soap请求方法名称.NET Core API
【发布时间】:2022-10-20 00:16:11
【问题描述】:

我使用 Visual Studio 2022 编辑器从 WSDL 自动创建类。当我使用 Soap UI 调用方法时,我试图确保方法名称不会出现在请求 XML 结构中。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v3="http://belediye.turkiye.gov.tr/v3">
   <soapenv:Header/>
   <soapenv:Body>
      <v3:sicilSorgula> ---->> This is method name and I want to remove this element
         <!--Optional:-->
         <v3:sicilSorgulamaG>
         </v3:sicilSorgulamaG>
      </v3:sicilSorgula>
   </soapenv:Body>
</soapenv:Envelope>

我试过了

[MessageContract(IsWrapped=false)]

但这没有用

请求 XML 结构必须是这样的:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v3="http://belediye.turkiye.gov.tr/v3">
<soapenv:Header/>
   <soapenv:Body>
         <!--Optional:-->
         <v3:sicilSorgulamaG>
            <!--Optional:-->
         </v3:sicilSorgulamaG>
   </soapenv:Body>
</soapenv:Envelope>

【问题讨论】:

  • 然后你必须修改 c# 类。完成后代码可能无法工作,因为 xml 具有架构,如果 xml 与架构不匹配,您将收到错误。
  • 当我使用基本 wsdl 并对其进行测试时,soapui <v3:sicilSorgula> 在请求 xml 中找不到
  • 它在 c# 类中吗?您是否为类中的对象添加了值?
  • 您为输入参数定义了一个[MessageContract(IsWrapped=false)],您还需要为输出定义一个单独的参数,我建议您检查the documentation并参考this post
  • 我决定使用 .net Web 应用程序而不是 .net 核心来编写项目。在 .net 网络应用程序中[SoapDocumentMethod(Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Bare)]属性解决了这个问题。我在两个项目中都使用了相同的 wsdl。同时,在.net core项目中将输入参数绑定到类时出现了问题。

标签: xml .net-core soap asp.net-core-webapi


【解决方案1】:

System.Web.Services 是 WCF 的前身。由于即使是强大的 WCF 在服务器端也被认为已弃用,所以不要期望 System.Web.Services 在 .NET Core 或具体的 App Model ASP.NET Core 1.0 中可用。他们的命名空间甚至以 Microsoft.AspNetCore 开头。 SOAP 被认为已弃用,取而代之的是 REST 和 JSON。微软会告诉你:使用.NET 框架但不是.NET 核心.

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 2019-03-08
    • 2021-08-19
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多