【发布时间】: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