【问题标题】:How to change WebService's response's tag name in .NET/ASMX?如何在 .NET/ASMX 中更改 WebService 的响应标签名称?
【发布时间】:2010-11-25 09:57:52
【问题描述】:

我有以下代码:

namespace WebService1
{
    [System.Web.Services.WebService(Namespace = "mynamespace", 
                Name = "ControlModuleService")]
    [System.ComponentModel.ToolboxItem(false)]
    [System.Web.Services.WebServiceBindingAttribute(Name = "ControlModulePort"),
    SoapDocumentService(SoapBindingUse.Literal,SoapParameterStyle.Bare)]

    public class Service1 : CommandCenter
    {

        [WebMethod, SoapDocumentMethod(
        ResponseElementName = "setConfigurationResponse")]
        public setConfigurationResponse setConfiguration(setConfigurationRequest request) 
        {

            return new setConfigurationResponse();
        }
}

类型:

[System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
    [System.ServiceModel.MessageContractAttribute(WrapperName = "setConfigurationResponse", WrapperNamespace = "mynamespace", IsWrapped = false)]
    public partial class setConfigurationResponse
    {

        [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "mynamespace", Order = 0)]
        [System.Xml.Serialization.XmlElementAttribute("return", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public transaction[] @return;

        public setConfigurationResponse()
        {
        }

        public setConfigurationResponse(transaction[] @return)
        {
            this.@return = @return;
        }
    }

它生成以下 WSDL:

<wsdl:types>
    <s:schema elementFormDefault="qualified" targetNamespace="mynamespace">
      <s:element name="request" type="tns:setConfigurationRequest" />
      <s:complexType name="setConfigurationRequest">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" form="unqualified" name="transactions" type="tns:transaction" />
          <s:element minOccurs="1" maxOccurs="1" form="unqualified" name="turnOnMode" type="s:boolean" />
          <s:element minOccurs="1" maxOccurs="1" form="unqualified" name="turnOffMode" type="s:boolean" />

        </s:sequence>
      </s:complexType>
      <s:complexType name="transaction">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="1" form="unqualified" name="idCC" type="s:string" />
          <s:element minOccurs="1" maxOccurs="1" form="unqualified" name="idTrans" type="s:int" />
          <s:element minOccurs="1" maxOccurs="1" form="unqualified" name="startTime" type="s:long" />
          <s:element minOccurs="1" maxOccurs="1" form="unqualified" name="state" type="s:int" />
        </s:sequence>

      </s:complexType>
      <s:element name="setConfigurationResult" type="tns:setConfigurationResponse" />
      <s:complexType name="setConfigurationResponse">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" form="unqualified" name="return" type="tns:transaction" />
        </s:sequence>
      </s:complexType>
...
</s:schema>
</wsdl:types>

为什么要将名称 setConfigurationResponse 更改为 setconfigurationResult? 怎么改?

【问题讨论】:

    标签: c# .net web-services


    【解决方案1】:

    它既简单又复杂且难以找到:

    就在类定义的正上方:

    [XmlRoot(DataType = "setConfigurationResponse", ElementName = "setConfigurationResponse")] 
    

    导致...

    [System.Diagnostics.DebuggerStepThroughAttribute()]
        [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
        [System.ServiceModel.MessageContractAttribute(WrapperName = "setConfigurationResponse", WrapperNamespace = "mynamespace", IsWrapped = false)]
        [XmlRoot(DataType = "setConfigurationResponse", ElementName = "setConfigurationResponse")] 
        public partial class setConfigurationResponse
        {
    
            [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "mynamespace", Order = 0)]
            [System.Xml.Serialization.XmlElementAttribute("return", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
            public transaction[] @return;
    
            public setConfigurationResponse()
            {
            }
    
            public setConfigurationResponse(transaction[] @return)
            {
                this.@return = @return;
            }
        }
    

    最后... :)

    <s:element name="setConfigurationResponse" nillable="true" type="tns:setConfigurationResponse"/>
    −
    <s:complexType name="setConfigurationResponse">
    −
    <s:sequence>
    <s:element minOccurs="0" maxOccurs="unbounded" form="unqualified" name="return" type="tns:transaction"/>
    </s:sequence>
    </s:complexType>
    

    【讨论】:

      【解决方案2】:
      [XmlRoot(DataType = "setConfigurationResponse", ElementName = "setConfigurationResponse")]
      [System.Diagnostics.DebuggerStepThroughAttribute()]
          [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
          [System.ServiceModel.MessageContractAttribute(WrapperName = "setConfigurationResponse", WrapperNamespace = "mynamespace", IsWrapped = false)]
          [XmlRoot(DataType = "setConfigurationResponse", ElementName = "setConfigurationResponse")] 
          public partial class setConfigurationResponse
          {
      
              [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "mynamespace", Order = 0)]
              [System.Xml.Serialization.XmlElementAttribute("return", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
              public transaction[] @return;
      
              public setConfigurationResponse()
              {
              }
      
              public setConfigurationResponse(transaction[] @return)
              {
                  this.@return = @return;
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-27
        • 1970-01-01
        • 2012-01-11
        • 2020-05-05
        • 1970-01-01
        • 1970-01-01
        • 2017-01-12
        相关资源
        最近更新 更多