Web services 开发asp.net Web服务的最佳方法是什么?该服务将具有返回列表、单个对象或其他复杂数据类型的方法

Web services 开发asp.net Web服务的最佳方法是什么?该服务将具有返回列表、单个对象或其他复杂数据类型的方法,web-services,asmx,return-value,Web Services,Asmx,Return Value,我们正在使用.NET2.0创建Web服务。我们想在ASP.NET2.0中设计Web服务 目前,我们已经返回了一个参数,比如 <s:element name="ChangePassword"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="userName" type="s:string" />

我们正在使用.NET2.0创建Web服务。我们想在ASP.NET2.0中设计Web服务

目前,我们已经返回了一个参数,比如

  <s:element name="ChangePassword">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="userName" type="s:string" />
        <s:element minOccurs="0" maxOccurs="1" name="currentPassword" type="s:string"/>
        <s:element minOccurs="0" maxOccurs="1" name="newPassword" type="s:string" />
      </s:sequence>
    </s:complexType>
  </s:element>
  <s:element name="ChangePasswordResponse">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="1" maxOccurs="1" name="ChangePasswordResult" type="s:boolean" />
      </s:sequence>
    </s:complexType>
  </s:element>


我们还设计了返回如下模型的Web服务

  <s:element name="GetCreditBalance">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="userName" type="s:string" />
        <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string" />
      </s:sequence>
    </s:complexType>
  </s:element>
  <s:element name="GetCreditBalanceResponse">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="GetCreditBalanceResult" type="tns:UserCreditsModel" />
      </s:sequence>
    </s:complexType>
  </s:element>
  <s:complexType name="UserCreditsModel">
    <s:sequence>
      <s:element minOccurs="1" maxOccurs="1" name="UserId" type="s:int" />
      <s:element minOccurs="1" maxOccurs="1" name="CreditBalance" type="s:decimal" />
      <s:element minOccurs="1" maxOccurs="1" name="ValidityDate" type="s:dateTime" />
    </s:sequence>
  </s:complexType>


我们还设计了返回模型列表的Web服务,如

  <s:element name="GetHistory">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="userName" type="s:string" />
        <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string" />
      </s:sequence>
    </s:complexType>
  </s:element>
  <s:element name="GetHistoryResponse">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="GetHistoryResult" type="tns:ArrayOfSMSCreditHistoryModel" />
      </s:sequence>
    </s:complexType>
  </s:element>
  <s:complexType name="ArrayOfSMSCreditHistoryModel">
    <s:sequence>
      <s:element minOccurs="0" maxOccurs="unbounded" name="SMSCreditHistoryModel" nillable="true" type="tns:SMSCreditHistoryModel" />
    </s:sequence>
  </s:complexType>
  <s:complexType name="SMSCreditHistoryModel">
    <s:sequence>
      <s:element minOccurs="1" maxOccurs="1" name="CreditHistoryId" type="s:int" />
      <s:element minOccurs="1" maxOccurs="1" name="UserId" type="s:int" />
      <s:element minOccurs="1" maxOccurs="1" name="PaymentDate" type="s:dateTime" />
      <s:element minOccurs="0" maxOccurs="1" name="PaymentRefNo" type="s:string" />
      <s:element minOccurs="1" maxOccurs="1" name="TotalAmount" type="s:decimal" />
      <s:element minOccurs="1" maxOccurs="1" name="CreditsEarned" type="s:int" />
      <s:element minOccurs="1" maxOccurs="1" name="ValidityDate" type="s:dateTime" />
      <s:element minOccurs="0" maxOccurs="1" name="Mode" type="s:string" />
      <s:element minOccurs="0" maxOccurs="1" name="Status" type="s:string" />
      <s:element minOccurs="0" maxOccurs="1" name="ChequeNO" type="s:string" />
      <s:element minOccurs="1" maxOccurs="1" name="ChequeDate" type="s:dateTime" />
      <s:element minOccurs="0" maxOccurs="1" name="ChequeBankName" type="s:string" />
      <s:element minOccurs="0" maxOccurs="1" name="Remarks" type="s:string" />
      <s:element minOccurs="0" maxOccurs="1" name="ValidityDateTime" type="s:string" />
    </s:sequence>
  </s:complexType>


当前的方法是,如果在任何操作失败(如身份验证失败)时,我们从Web服务抛出一个异常

我们想知道哪种方法是设计Web服务的最佳方法,这样它就可以跨各种平台使用,而不会出现技术问题


使用json会有帮助。返回纯XML会有所帮助。

通常,您应该从ASMX web服务抛出
SoapException
,以指示失败。这将向客户端返回一条SOAP错误消息

但是,ASMX web服务对SOAP错误没有适当的支持。生成的WSDL不会向客户端指示您的操作可能返回错误。这将阻止某些客户端正确处理这些故障

所以,您应该真正转向WCF,它解决了这个问题。如果必须继续使用.NET 2.0,您的备选方案是不使用
SoapException
,或者创建您自己的WSDL,它应该正确地描述操作返回的错误