特定格式的 C# Web 方法

C# Web Method In Specific Format

在 C# Web 应用程序的 ASMX 文件中创建 Web 方法时,关联的 WSDL 格式如下:

<Envelope>
  <Header/>
  <Body>
    <WebMethodName>
      <WebMethodArgumentName>
        <WebMethodArgumentType>

我需要这样:

<Envelope>
  <Header/>
  <Body>
    <WebMethodName>
      <WebMethodArgumentType>

或者像这样:

<Envelope>
  <Header/>
  <Body>
    <WebMethodArgumentName>
      <WebMethodArgumentType>

这是因为客户端发送的是那种格式的请求,所以我需要控制外层标签的名字,我能想到的办法只有改web方法的名字或者web方法参数,但为了做到这一点,我只需要这些标签之一。

顺便说一句,我用 svcutil.exe 生成代码(wsdl.exe 产生相同的结果),如下所示:

svcutil /language:C# /out:IWebServiceName.cs /n:*,Web.Service.Namespace ^
..\XSD\SomeXsd.xsd ^
..\XSD\AnotherXsd.xsd ^
..\WSDL\TheWsdl.wsdl

我怎样才能做到这一点?

谢谢!

问这个问题已经有一段时间了,但终于得到了答案:用这样的注释装饰 web 方法:

[SoapDocumentMethod(ParameterStyle = SoapParameterStyle.Bare)]

根据docs,枚举有3个成员:

Bare, Default, Wrapped

Wrapped是默认的,对参数进行封装。

我正在寻找 Bare,它将参数直接放在 SOAP 请求或 SOAP 响应的 Body 元素之后。

希望它能帮助像我一样处理这个问题的人。